1

我在 perl 中有一个 Dancer 应用程序来处理获取/发布请求。

我的示例路线之一如下:

post '/handle_data' => sub {

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

我的问题:有没有一种简单的方法可以在另一个进程中执行长时间运行的任务而不阻塞请求?

我已经fork and return在父进程中尝试过,exit在孩子长时间运行任务之后,但这一切似乎都阻止了响应发送,直到孩子完成。

任何帮助表示赞赏。

编辑:

我最终切换到一个成熟的作业服务器,特别是Gearman的 perl 版本

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 运行它,按预期工作 - “内容!\n”立即返回到用户的浏览器,请求结束;分叉的进程挂起十秒钟睡眠,然后发出警告(在终端上可见)然后退出。

于 2012-11-28T21:20:24.380 回答