在我的应用程序中,用户需要通过表单注册,我必须发送三封邮件并进行其他(大型)数据库检查。这需要花费很多时间,是否有可能将整个任务作为后台进程或其他一些替代方案?
答案 0 :(得分:2)
如果您的数据库活动耗时太长,那么您需要重新考虑您的设计。但是,如果延迟是由电子邮件引起的,那么只需将电子邮件存储在数据库或文件中。创建一个cron作业,每隔5/10/15分钟发送一次这些排队的电子邮件(然后删除它们)。
答案 1 :(得分:1)
也许您可以在用户注册后将其标记为在您的数据库中挂起。
然后你可以推迟在后台运行的python或php例程中的工作,这些例程会查找任何待处理请求,执行检查,发送电子邮件并最终相应地更新数据库。
在此期间,用户将处于已注册但尚未处理的状态,但至少从访问者的角度来看,他不会等待处理所有内容。
答案 2 :(得分:0)
您无法使通过Web服务器启动的PHP脚本处理后台进程。
我会检查我是否可以优化数据库(可能,你没有足够的指标),如果它没有飞行,那么建立一个第二个进程,该进程可以定期启动(可能每五分钟一次) CLI方面带有cronjob
,向用户显示"感谢您注册"页面...
答案 3 :(得分:0)
根据我在其他地方的评论,如果性能问题不可避免,那么从PHP产生一个长时间运行的过程是一个实用的解决方案bearing in mind a few caveats。
然而,“发送3封邮件”不应花费相当多的时间(我不知道数据库检查的内容)。您需要花一些时间来优化现有流程。
解决问题的其他方法是传统的批处理,通过网络调用或异步消息传递系统将繁重的提升卸载到多进程/多线程守护程序,甚至是使用消息队列的单线程作业处理器。