2011-08-26 20 views
0

在我的应用程序运行时,用户需要通过一种形式,在那里我有三个邮件和做一些其他的(巨大)的数据库检查登记。这需要很多时间,是否有可能将整个任务作为后台进程或者其他替代方法?我通过一个PHP后台进程问题

回答

0

你不能使已启动了一个网络服务器进程后台进程的PHP脚本。

我会检查是否可以对数据库进行优化(可能没有足够的指标),如果这样做不起作用,那么在CLI上建立第二个定期开始(也许每五分钟一次)的进程一边用cronjob,显示用户“感谢您注册”网页...

+0

-1:“您无法创建PHP脚本......处理后台进程”。废话。当然,你不应该在一个Web请求的同一个线程中同步处理一个长时间运行的进程 - 但这距离你的声明还有很长的路要走。另请参阅http://symcbean.blogspot.com/2010/02/php-and-long-running-processes.html – symcbean

+0

所以,让我清楚地说明一下:首先,你误导我,然后你误解我说的错误引语(可能因为您不知道操作系统生态系统中的“后台进程”是什么),然后您使我失望了?一旦你通过Web服务器启动了一个PHP脚本,它就变成了一个子进程,并且不能成为它自己的后台进程。你在你那么强大(并且事实上是危险的)博客文章中的含义与我写的内容无关。有些人... – ty812

1

也许你可以当用户注册标志他为你的数据库悬而未决。

然后,你可以推迟在后台持续谁还会去找任何未处理的请求,做检查,发送的电子邮件,最终相应地更新数据库在Python或PHP日常运转工作。

在此期间,用户将在注册,但挂起状态,但在从一个访问者点至少,他没有坚持等到一切被processesed。

2

如果您的数据库活动时间过长,则需要重新考虑设计。但是,如果延迟是由于电子邮件造成的,那么只需将电子邮件存储在数据库或文件中即可。创建一个cron作业,每5/10/15分钟发送一次这些排队的电子邮件(然后删除它们)。

0

按其他地方我的意见,从产卵PHP一个长期运行的进程是一个实用的解决方案bearing in mind a few caveats如果性能问题是不可避免的。

但是“发送3封邮件”不应该花费大量的时间(我不知道数据库检查的是什么)。您需要花一些时间来优化现有流程。

解决问题的其他方法是传统的批处理,通过网络调用或异步消息传递系统将繁重的工作卸载到多进程/多线程守护进程,甚至是使用消息队列的单线程作业处理器。