mod_perl で時間がかかる処理を行う場合

CGI 時代では,たとえばメールを送るなど時間がかかる処理を行う時は fork() を使っていました。子プロセスでメール送信,親プロセスでレスポンスを返す,とやると,ユーザはメールが実際に送られるかどうかに関わらず ASAP でレスポンスを受け取ることができました,たしか(\*STDOUT を close したりとかいろいろあった気もするけど)。

では mod_perl(2) ではどうなのか。ベストプラクティスがわかりません。

  1. Cleanup ハンドラを登録してそこでやる
  2. threads を使う(prefork MPM だとうまくいかない気がする…ハンドラ終了時に thread が殺されそうな予感→forks 使えばいいのかな?)
  3. 意地でも fork を使う*1
  4. 時間がかかる処理はデーモンを書き起こしてレスポンスハンドラから UNIX ソケット等で接続(笑

この中だと1番目なのですかねぇ。ご存じの方がいらっしゃったら教えてください。

*1:この記事 が参考になるかもしれません。半分くらいしか読んでいませんが。