长时间运行的PHP方法 - 如何处理?

时间:2012-10-31 01:17:01

标签: php

这是我的情景。在我的应用程序注册期间 - 我会触发一些长时间运行的PHP方法调用(例如,使用OpenGraph API获取UserFriendLikes等)。

我希望方法在后台运行而用户不会注意到它 - 并让方法在其自己的时间完成。

什么是最好的方式来实现它?是否只是从用户注册页面调用longRunningMethod() - 或者还有什么我需要做的,以确保在用户导航到另一个页面时不会终止它等等?

2 个答案:

答案 0 :(得分:4)

我将使用shell exec创建一个新进程。这样的事情应该有效:

shell_exec("./scriptname.php > /dev/null 2>/dev/null &");

它会启动一个新的流程我相信并继续在调用页面上执行,允许用户照常继续。

答案 1 :(得分:3)

蒂姆S'上面的解决方案可行,但难以扩展。另一种方法是将工作请求放在队列中,由工作程序拾取并处理。换句话说,注册页面可以放入队列中,然后用户可以自由地导航到其他页面。

看一下像RabbitMQ这样的工作队列这里有一个描述它的文档中的一个词,看起来它有助于解决你的问题:

  

工作队列(又名:任务队列)背后的主要思想是避免这样做   立即执行资源密集型任务,并且必须等待它   完成。相反,我们安排任务稍后完成。

如果您不想自己设置Rabbit MQ,可以尝试在Iron.io注册工作人员。我认为它附带一个免费帐户。