我正在运行一个PHP后台进程的问题

在我的应用程序中,用户需要通过表单进行注册,在这里我必须发送三封邮件,并进行其他(巨大的)数据库检查。 这需要花费很多时间,是否有可能将整个任务作为后台进程或其他替代方法?

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

也许你可以一旦用户注册标志着他在数据库中等待。

然后,你可以推迟在后台运行的python或php程序工作,谁会寻找任何未决的请求,做检查,发送电子邮件,并最终相应地更新数据库。

在此期间用户将处于已注册但尚未处理的状态,但至少从访问者的角度来看,他不会等待所有要处理的内容。

您无法将通过Web服务器进程启动的PHP脚本创建为后台进程。

我会检查如果我可以优化数据库(可能,你没有足够的指标),如果这不起飞,建立第二个进程定期开始(可能每隔五分钟一次)在CLI端用cronjob ,向用户显示“感谢您的注册”页面…

正如我在其他地方的评论,从PHP产生一个长期运行的过程是一个实际的解决方案,铭记几个警告,如果性能问题是不可避免的。

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

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