您的方法的缺点是有很多方法可能会失败,尤其是在停止和重新启动烧瓶应用程序时。
- 你将不得不处理优雅的关闭,让你的工作人员有机会完成当前的任务。
- 有时,当您重新启动烧瓶应用程序时,您的工作人员不会准时停止,并且可能会在您启动另一个工作人员时逗留。
以下是我建议的一些方法,具体取决于您的限制:
脚本 + crontab
您只需要编写一个脚本来执行您想要的任何任务,并且cron
每隔几分钟就会为您运行一次。优点:cron
会定期为您运行,并在系统启动时启动。缺点:如果任务花费的时间太长,您可能会同时运行多个脚本实例。你可以在这里找到一些解决这个问题的方法。
监督者
supervisord
是处理不同守护进程的一种巧妙方法。您可以将其设置为运行您的应用程序、后台脚本或两者,并让它们从服务器启动。唯一的缺点是您必须安装supervisord
并确保其守护程序在服务器启动时正在运行。
uwsgi
uwsgi
是部署烧瓶应用程序的一种非常常见的方式。它几乎没有可以用来管理后台工作人员的功能。
芹菜
Celery 是一个基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。我认为这是为烧瓶应用程序或任何其他基于 python 的应用程序调度后台任务的最佳解决方案。但是使用它会带来一些额外的体积。您将至少介绍以下流程: - 代理(rabbitmq 或 redis) - 工作人员 - 调度程序
您还可以supervisord
管理上述所有进程,并在服务器启动时启动它们。
结论
在您减少流程数量的过程中,我强烈建议您使用crontab
基于解决方案的解决方案,因为它可以让您走得更远。但请确保您的后台脚本留下执行痕迹或某种形式的日志。