在服务器端:我需要一种在后台频繁执行一些任务并在特定时间启动的方法。我的编程语言是Python作为后端(Sanic Framework(,VueJs作为前端,MongoDB作为主数据库,Redis用于缓存。此外,我正在使用一个Docker容器(Docker-compose(。此外,我以前在Celery工作过,但我想知道什么是保证其稳定可靠的最佳生产解决方案。
在客户端:对于上面提到的问题,我需要在服务器端运行它,有时我需要在客户端、嵌入式设备(如Raspberry Pi(上运行作业调度程序,这些设备可以运行Python或JavaScript。
那么,对于这些用例,您的解决方案是什么?
在生产中,我们有长期和短期运行的任务,我们的Celery集群每天总共执行多达6M个任务,所以我自然会推荐Celery。它是为这个目的而制作的,如果你是Python开发人员,你有另一个理由选择Celery。最后,Celery是我所知的唯一一个具有HA调度器的Python任务队列系统(https://github.com/mixkorshun/celery-beatx和https://github.com/sibson/redbeat)。
作为Celery-Huey的替代方案,还有另外两个(Python(项目值得一提(https://github.com/coleifer/huey)和Apache Airflow(https://github.com/apache/airflow)。
我是Sanic的核心开发人员之一。我同意其他答案,芹菜是一个很好的选择。对于任何需要更轻重量解决方案的人,我有一篇关于Sanic内部的替代方法的帖子:https://community.sanicframework.org/t/how-to-use-asyncio-queues-in-sanic/166/4
在python中的后台启动一个新进程就像调用os.fork()
一样简单。有关综合示例,请参阅https://python-course.eu/forking.php
编辑:
对于一个功能齐全的解决方案,我建议如上所述分叉一个后台进程,然后使用类似https://github.com/dbader/schedule以便在后台进程中以预定的间隔执行作业。