我有一个运行的Perl Mojo服务器,当发布到某个URL时,有一个脚本可以创建一个非常长的进程(大约一分钟的时间)的子进程。
该过程运行大约30秒钟,然后崩溃,并且这里没有抛出异常或生成任何日志。
我自然的假设是,这与连接超时有关,因此我增加了服务器的超时。话虽这么说,我非常有信心这与服务器进程无关,而是perl脚本本身超时。
我在子流程页面上看到文档:
请注意,这不会增加连接的超时,因此,如果分叉的过程将花费很长时间,则可能需要使用Mojolicious :: Plugin :: DefaultHelpers中的“ inactivity_timeout”来增加连接的超时。
DefaultHelpers文档说:
inactivity_timeout
$ c = $ c-> inactivity_timeout(3600);
在Mojo :: IOLoop中使用“ stream”查找当前连接,并尽可能增加超时。
较长的版本
Mojo :: IOLoop-> stream($ c-> tx-> connection)->超时(3600);
但我不确定如何(或在何处)定义不活动超时,或文档中$ c变量的确切含义。
我的代码:
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()
子进程完成后,传递给第二个回调函数进行处理。有关详细信息,请参见Mojo :: IOLoop :: Subprocess。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句