mod_perl で時間がかかる処理を行う場合
CGI 時代では,たとえばメールを送るなど時間がかかる処理を行う時は fork() を使っていました。子プロセスでメール送信,親プロセスでレスポンスを返す,とやると,ユーザはメールが実際に送られるかどうかに関わらず ASAP でレスポンスを受け取ることができました,たしか(\*STDOUT を close したりとかいろいろあった気もするけど)。
では mod_perl(2) ではどうなのか。ベストプラクティスがわかりません。
- Cleanup ハンドラを登録してそこでやる
- threads を使う(prefork MPM だとうまくいかない気がする…ハンドラ終了時に thread が殺されそうな予感→forks 使えばいいのかな?)
- 意地でも fork を使う*1
- 時間がかかる処理はデーモンを書き起こしてレスポンスハンドラから UNIX ソケット等で接続(笑
この中だと1番目なのですかねぇ。ご存じの方がいらっしゃったら教えてください。