標準構成 (plackup/Starman) で Dancer 1.31 を使用しています。
リクエストで、perl 関数を非同期で呼び出して、リクエストがすぐに返されるようにしたいと考えていました。典型的な「長時間実行操作」のシナリオを考えてみてください。このシナリオでは、更新とリダイレクトで「処理中のページ」を返したいと考えています。
私は(素朴に?)スレッドで試しました:
sub myfunc {
sleep 9; # just for testing a slow operation
}
any '/test1' => sub {
my $thr = threads->create('myfunc');
$thr->detach();
return "done" ;
};
動作しません。サーバーがフリーズしているようで、エラー ログに何も表示されません。Dancer 内でスレッドを手動で作成することは禁止されていると思いますか? それはPSGIの問題ですか?おすすめの方法は?