php在后台启动过程,并等待它完成

用户名

我有两个用户可以调用的脚本(A和B)。

如果用户调用A,我将进行大量数据库访问并检索结果以返回给用户。弄清楚需要发送回去的内容后,我将对数据库进行一些额外的处理和修改。

我想知道是否有可能将结果返回给用户,然后在某种后台任务中执行其余的处理。

另一个条件是,如果调用脚本A的用户然后调用脚本B,则由用户调用A触发的任何处理任务都必须完成,或者脚本B必须等待其完成。

有没有办法做到这一点?

阿特拉克

在关闭请求后,php无法执行任务,因为该请求(以及发送到浏览器的响应)在php进程完成时实际上已关闭。

另外,php适用于短时间操作,而不适合长时间运行的程序(如守护程序),因为php缺少良好的垃圾收集器(因此,它在崩溃之前会耗尽所有可用的内存)。

您正在寻找的被称为队列。当您需要执行一些占用资源(或时间)的任务时,可以将任务放入队列。然后,工作进程将从队列中取出一项,然后执行任务。

这使您可以通过限制工作人员的数量来避免资源使用,以避免高峰和服务故障。

看一下resque(用于自托管解决方案)或iron.io(用于云,免费安装解决方案)

如果您在共享主机上(因此,没有队列且没有cron可用),那么我建议您查看iron.io推送队列。当队列不为空时,此类队列将调用您的服务器(通过HTTP)向其发送任务。这样,所有轮询/检查队列都在iron.io一侧完成,您只需要设置一个常规页面即可执行任务。

另外,如果希望脚本B等待脚本A完成,则必须创建某种锁定系统。但是,如果我是您,我会尽量避免这种情况,因为这可能会导致死锁(一个线程在等待另一个线程,但是另一个线程将永远无法完成,从而永远阻塞正在等待的线程)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章