gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:22:58 25 4
gpt4 key购买 nike

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

我习惯了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看起来很复杂并且需要很长时间才能安装,所以如果有人知道提供类似功能的更轻量级的模块,我会很高兴。

关于multithreading - 如何在后台运行 Plack 请求处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20978119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com