9

我目前正在尝试从我可用的内容中生成关于 demenad 的 epub。不幸的是,当 epub 的内容很多时,http 请求需要一段时间(在某些情况下需要 10 分钟)才能完成 - 这并不理想

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

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

4

2 回答 2

19

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

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

后台任务的一种选择是使用fork。但是,我强烈建议使用适当的作业管理器,如gearman(另请参阅php 扩展)或队列,如amqpzmq,以更干净地处理这些任务。哪一个更适合你的用例,我让你决定。

于 2012-12-10T14:29:17.677 回答
2

你可以运行命令

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &'
于 2012-12-10T14:18:27.503 回答