有时候我们需要处理耗时的操作,同时又要保持较快的响应速度,就需要借助异步队列的帮助。Celery 作为异步队列服务,想必是很多人和我一样的选择。用法在官方文档也详细介绍,不再赘述。
这次想记录的是用 Celery 来实现定时任务。这里也有一点点坑。
以下是 main.py
的内容
1 | from celery import Celery |
实际工作单元,我放在 apps 目录下的 tasks.py
文件中
1 | from lib.distribute import app |
上述是一个简单的 Crontab 应用,它仅需要以下命令就能执行,
其中 --beat
表示 crontab 的应用
1 | python main.py worker --beat -l info |
起初我想把异步队列和定时任务放在一起,就加上了一句 CELERY_QUEUES 的配置
1 | app.conf.update( |
同样用上述命令开启worker,发现这个时候 Crontab 不能工作了,后来看到官方的文档:
celery beat and celery worker as separate services instead.
也就是说 Celery 的 Beat 需要和其他异步worker 分开,单独执行。
相关代码链接