Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置Perl(Mojo)子进程的非活动超时_Perl_Mojolicious - Fatal编程技术网

设置Perl(Mojo)子进程的非活动超时

设置Perl(Mojo)子进程的非活动超时,perl,mojolicious,Perl,Mojolicious,我有一个Perl Mojo服务器在运行,当发布到某个url时,有一个脚本为一个很长的进程(大约一分钟)创建一个子进程 此进程运行约30秒,然后崩溃,这里没有抛出异常或生成任何日志 我的自然假设是这与连接超时有关,因此我增加了服务器的超时。话虽如此,我非常确信这与服务器进程无关,而是与perl脚本本身超时有关 我在“子流程”页面上看到文档,上面写着: 请注意,它不会增加连接的超时时间,因此如果分叉进程需要很长时间,则可能需要使用mojolicous::Plugin::DefaultHelpers中

我有一个Perl Mojo服务器在运行,当发布到某个url时,有一个脚本为一个很长的进程(大约一分钟)创建一个子进程

此进程运行约30秒,然后崩溃,这里没有抛出异常或生成任何日志

我的自然假设是这与连接超时有关,因此我增加了服务器的超时。话虽如此,我非常确信这与服务器进程无关,而是与perl脚本本身超时有关

我在“子流程”页面上看到文档,上面写着:

请注意,它不会增加连接的超时时间,因此如果分叉进程需要很长时间,则可能需要使用mojolicous::Plugin::DefaultHelpers中的“不活动超时”来增加连接的超时时间

DefaultHelpers文档说:

不活动超时

$c=$c->不活动\超时(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()
的第二个回调在子流程完成时执行处理。 有关详细信息,请参阅