【问题标题】:PHP - Long Running Background TaskPHP - 长时间运行的后台任务
【发布时间】:2012-12-10 14:15:22
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,如果您在共享网络主机上,您的主机可能不允许脚本长时间执行。因此,您可能不得不分批工作(如果可能的话)。

标签: php background


【解决方案1】:

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

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

后台任务的一个选项是使用fork。但是,我强烈建议使用像gearman 这样的合适的作业管理器(也请参阅php extensions),或者像amqpzmq 这样的队列来更干净地处理这些任务。哪个更适合你的用例,我让你决定。

【讨论】:

    【解决方案2】:

    你可以运行命令

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2014-10-26
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2015-04-01
      • 1970-01-01
      相关资源
      最近更新 更多