如何为一个PERL脚本增加网关超时?

时间:2014-01-21 22:58:08

标签: perl cgi-bin

我在cgi-bin中有一个PERL脚本,并通过apache传递,该脚本从一组XML文件创建一个PDF文件。长话短说...它需要一段时间,我的浏览器在完成之前报告504 Gateway Time-out错误。

我不想在我的apache配置中增加默认超时,但我确实想为这个脚本增加超时,只有经过适当身份验证的管理员才能访问该脚本。

是否有可以添加到PERL cgi脚本的命令会增加超时?

在PHP中有命令set_time_limit($n)ini_set('max_execution_time', $n);我正在寻找PERL等价物(如果有的话)。

2 个答案:

答案 0 :(得分:4)

Perl不是超时,它是你的HTTP服务器(例如Apache)。

目前传统的观点是,长时间运行的作业应该排队,由工作人员作业处理(不在Web应用程序逻辑中,然后客户端稍后重新轮询结果。

Folks将此模型用于短期运行的作业,以提高Web应用程序吞吐量,但如果您的作业超出服务器超时,您实际上只有三种选择:

  1. 缩短工作时间
  2. 使用queue + alert / repoll方法
  3. 更改服务器超时。
  4. -------------------------------- 2014-12-10编辑--------- --------------------

    要增加网关超时,请在apache 2.4上查看mod_reqtimeout

    的文档

答案 1 :(得分:0)

use threads;
sub keepalive_httpd{
    $SIG{'KILL'} = sub { threads->exit(); };
    $| = 1;
    do{
        print ".\n";
        sleep 1;
    } while(1);
}

my $thr = threads->create('keepalive_httpd');

do something long...

$thr->kill('KILL')->detach();
print "<BR>\n";