设置Perl(Mojo)子进程的非活动超时
我有一个Perl Mojo服务器在运行,当发布到某个url时,有一个脚本为一个很长的进程(大约一分钟)创建一个子进程 此进程运行约30秒,然后崩溃,这里没有抛出异常或生成任何日志 我的自然假设是这与连接超时有关,因此我增加了服务器的超时。话虽如此,我非常确信这与服务器进程无关,而是与perl脚本本身超时有关 我在“子流程”页面上看到文档,上面写着: 请注意,它不会增加连接的超时时间,因此如果分叉进程需要很长时间,则可能需要使用mojolicous::Plugin::DefaultHelpers中的“不活动超时”来增加连接的超时时间 DefaultHelpers文档说: 不活动超时 $c=$c->不活动\超时(3600) 在Mojo::IOLoop中使用“stream”查找当前连接,并尽可能增加超时 较长版本 Mojo::IOLoop->stream($c->tx->connection)->超时(3600) 但我并不确定如何(或在哪里)定义非活动超时,或者文档中的$c变量是什么 我的代码:设置Perl(Mojo)子进程的非活动超时,perl,mojolicious,Perl,Mojolicious,我有一个Perl Mojo服务器在运行,当发布到某个url时,有一个脚本为一个很长的进程(大约一分钟)创建一个子进程 此进程运行约30秒,然后崩溃,这里没有抛出异常或生成任何日志 我的自然假设是这与连接超时有关,因此我增加了服务器的超时。话虽如此,我非常确信这与服务器进程无关,而是与perl脚本本身超时有关 我在“子流程”页面上看到文档,上面写着: 请注意,它不会增加连接的超时时间,因此如果分叉进程需要很长时间,则可能需要使用mojolicous::Plugin::DefaultHelpers中
sub long_process{
my ($self) = @_;
my $fc = Mojo::IOLoop::Subprocess->new;
$fc->run(
sub {
my @args = @_;
sleep(60);
},[],
);
}
链接:
以下是一个简单的例子:
use Mojolicious::Lite;
get '/',
sub {
my $self = shift;
say Mojo::IOLoop->stream($self->tx->connection)->timeout;
$self->inactivity_timeout(60);
say Mojo::IOLoop->stream($self->tx->connection)->timeout;
my $fc = Mojo::IOLoop::Subprocess->new;
$fc->run(
sub {
my @args = @_;
sleep(20);
return 'Hello Mojo!';
},
sub {
my ($subprocess, $err, $result) = @_;
say $result;
$self->stash(result => $result);
$self->render(template => 'foo');
}
);
};
app->start;
__DATA__
@@ foo.html.ep
%== $result
传递给run()
的第二个回调在子流程完成时执行处理。
有关详细信息,请参阅