我正在编写一个由Perl / CGI应用程序控制的Bulk Mail调度程序,并希望学习“好”方法来分叉CGI程序来运行单独的任务?一个人应该这样做吗?或者最好是像Gearman一样运行像TheSchwartz或suggested recently这样的单独作业队列引擎的开销。当使用像CGI :: Application这样的近MVC框架而不是vanilla CGI.pm时,答案/透视是否会改变?最后一个来自我想到的CGI :: Application Plugin的一个可能的项目 - 这将使“分叉”一个过程变得相对简单。
答案 0 :(得分:9)
看看Proc :: Daemon - 这是最简单的方法。从您的CGI脚本,执行CGI业务(获取输入,返回对浏览器的响应),然后调用Proc :: Daemon :: init()执行fork,守护您的进程并使父进程退出。然后你的脚本(现在是一个守护进程)执行其长时间运行的任务,并在完成后退出。 您希望在作为守护程序运行时更新某些内容(文件,数据库记录),因此后续的CGI调用可以检查它的作用(或它的进展情况)。
答案 1 :(得分:0)
POE之类的内容会有用吗?它比分叉更受事件驱动,但它可能满足您的需求。