1

私はperlにget/postリクエストを処理するDancerアプリを持っています。

私のルート例の1つは以下のとおりです。

post '/handle_data' => sub {

    # perform some calculations
    ...
    # store some data
    ...
    # do some long running tasks
    ...
};

私の質問:リクエストをブロックせずに、別のプロセスで長時間実行されるタスクを実行する簡単な方法はありますか?

fork and return親プロセスで、子に対して長時間実行されているタスクを試してみましたexitが、子が完了するまで、すべてが応答の送信をブロックしているようです。

どんな助けでも大歓迎です。

編集:

結局、本格的なジョブサーバー、特にPerlバージョンのGearmanに切り替えることになりました。

4

1 に答える 1

3

フォークとリターンは私にとってはうまくいくようです。

私は試した:

#!/usr/bin/perl

use Dancer;

get '/' => sub {
    fork and return "Content!\n";

    sleep 10; # do your actual work here
    warn "Child process done\n";
    exit;
};

dance;

スタンドアロン サーバーまたは plackup/Starman を介して実行すると、期待どおりに動作します。"Content!\n" がユーザーのブラウザーにすぐに返され、要求が終了します。フォークされたプロセスは 10 秒間スリープ状態になり、警告 (端末に表示されます) を発行して終了します。

于 2012-11-28T21:20:24.380 に答える