我目前正在尝试从可用的内容生成demenad上的epub.不幸的是,当epub有很多内容时,http请求需要一段时间(在某些情况下为10分钟) - 这不太理想
我想遵循类似于Safari的方法 - 生成epub并在文档可用时通过电子邮件发送给用户
我的问题是 - 在PHP中运行后台任务/线程的最佳方法是什么,可能需要很长时间才能完成
She*_*rif 17
你需要小心长时间运行的PHP进程,因为一个PHP的内存效率不高(例如,PHP中只有100个整数的数组可以消耗多达15KB的内存).这通常适用于99%的用例,因为大多数人只是在网站上使用PHP而这些进程运行的时间只有几分之一,所以因为速度而牺牲了内存.但是,对于长时间运行的过程(特别是如果你有很多这样的过程),这可能不是你最好的解决方案.
您还需要非常小心地在PHP中调用exec/shell_exec函数,因为它们在内部实现为流(即它们可能导致父进程中的阻塞,因为它通常必须等待流返回数据).
后台任务的一个选项是使用fork.但是,我强烈建议使用一个合适的作业管理器,如gearman(也参见php扩展),或者像amqp或zmq一样排队,以更干净地处理这些任务.哪一个更适合您的用例,我会让您决定.