如何分叉Perl CGI程序以解决长时间运行的任务?

时间:2009-06-04 17:56:25

标签: perl cgi fork

我正在编写一个由Perl / CGI应用程序控制的Bulk Mail调度程序,并希望学习“好”方法来分叉CGI程序来运行单独的任务?一个人应该这样做吗?或者最好是像Gearman一样运行像TheSchwartzsuggested recently这样的单独作业队列引擎的开销。当使用像CGI :: Application这样的近MVC框架而不是vanilla CGI.pm时,答案/透视是否会改变?最后一个来自我想到的CGI :: Application Plugin的一个可能的项目 - 这将使“分叉”一个过程变得相对简单。

2 个答案:

答案 0 :(得分:9)

看看Proc :: Daemon - 这是最简单的方法。从您的CGI脚本,执行CGI业务(获取输入,返回对浏览器的响应),然后调用Proc :: Daemon :: init()执行fork,守护您的进程并使父进程退出。然后你的脚本(现在是一个守护进程)执行其长时间运行的任务,并在完成后退出。 您希望在作为守护程序运行时更新某些内容(文件,数据库记录),因此后续的CGI调用可以检查它的作用(或它的进展情况)。

答案 1 :(得分:0)

POE之类的内容会有用吗?它比分叉更受事件驱动,但它可能满足您的需求。