PHP - 长时间运行的后台任务

时间:2012-12-10 14:15:23

标签: php background

我目前正在尝试根据我可以使用的内容生成一个关于demenad的epub。 不幸的是,当epub有很多内容时,http请求需要一段时间(在某些情况下为10分钟) - 这是不理想的

我想遵循类似于Safari的方法 - 生成epub并在文档可用时通过电子邮件发送给用户

我的问题是 - 在PHP中运行后台任务/线程的最佳方法是什么,可能需要很长时间才能完成

2 个答案:

答案 0 :(得分:16)

你要小心长时间运行的PHP进程,因为一个PHP的内存效率不高(例如,PHP中只有100个整数的数组可以消耗多达15KB的内存)。这通常适用于99%的用例,因为大多数人只是在网站上使用PHP而这些进程运行的时间只有几分之一,所以因为速度而牺牲了内存。但是,对于长时间运行的过程(特别是如果你有很多这样的过程),这可能不是你最好的解决方案。

您还需要非常小心地在PHP中调用exec / shell_exec函数,因为它们在内部实现为流(即它们可能导致父进程中的阻塞,因为它通常必须等待流返回数据)。 / p>

背景任务的一个选项是使用fork。但是,我强烈建议您使用适当的职位经理,例如gearman(请参阅php extensions),或排队,如amqpzmq,以便更干净地处理这些任务。哪一个更适合您的用例,我会让您决定。

答案 1 :(得分:1)

你可以运行命令

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &'