如何分叉Perl CGI程序以独立运行长时间任务?

4
我正在编写一个由Perl/CGI应用程序控制的批量邮件调度程序,想了解一些“良好”的方式来分叉运行单独的任务。是否应该这样做?还是更好地忍受运行单独的作业队列引擎(如GearmanTheSchwartz),正如最近所建议的那样。当使用类似于CGI::Application的接近MVC框架时,答案/观点是否会改变,而不是普通的CGI.pm?最后一个问题来自于我对CGI::Application插件的可能项目 - 这将使“分叉”进程相对简单调用。
2个回答

9
看看Proc::Daemon - 这是最简单的可行方案。从您的CGI脚本中,执行CGI业务(获取输入,返回响应给浏览器),然后调用Proc::Daemon::init(),该函数会进行分叉、守护进程化您的进程并使父进程退出。然后您的脚本(现在是守护进程)将执行其长时间运行的任务,并在完成时退出。 您需要在作为守护进程运行时更新某些内容(文件,数据库记录),以便随后的CGI调用可以检查它所做的事情(或者进展如何)。

0

类似 POE 这样的东西会有用吗?它比 forked 更加事件驱动,但可能能够满足您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接