如何在后台运行 Plack 请求处理程序



我有一个简单的Plack应用程序(类似于Plack::App::GitHub::WebHook),我使用plackup运行。我在请求处理程序中执行了一个冗长的操作,这目前使应用程序对后续请求无响应,直到操作完成。如何在后台执行操作,而不阻止其他请求?还有一个后续问题,我怎样才能在该后台队列中最多保持一个作业运行?

我习惯了 libdispatch,所以我会喜欢这样的东西:

my $queue = Hypothetical::Concurrency::Queue->new(max_jobs => 1);
$queue->dispatch(sub {
    # code
});

我刚刚意识到我忘记了一个非常重要的区别:我不必等待作业完成来响应HTTP请求。这意味着我对 Forks::Super 很好:

#!/usr/bin/env perl
use strict;
use warnings;
use Forks::Super MAX_PROC => 1, ON_BUSY => 'queue';
my $app = sub {
    my $env = shift;
    fork sub {
        # lengthy operation
    };
    return [202, ['Content-Type'=>'text/plain', 'Content-Length'=>8], ["Accepted"]];
};

现在,为请求提供服务会立即完成,长时间的操作在后台运行,并且最多有一个操作正在运行。 Forks::Super看起来很复杂,需要很长时间才能安装,所以如果有人知道提供类似功能的更轻量级模块,我会很高兴。

相关内容

  • 没有找到相关文章

最新更新