Docker容器中运行Django+Celery+Celery Beat时任务每秒执行是否正常?
Docker容器中运行Django+Celery+Celery Beat时任务每秒执行是否正常?
兄弟,先给你拆解下当前的情况:
从日志里的
trigger: interval[0:00:01]就能看出来,这个EventPublisher.send_events任务被配置成了每秒执行一次,所以它现在每秒跑完全是符合你设定的调度规则的,本身不算“异常”——如果这就是你想要的执行频率,那完全没问题。但如果这不是你预期的(比如你本来想让它每分钟/每小时跑一次),那你得去检查Celery Beat的任务调度配置:
- 如果你是用Django的
settings.py里的CELERY_BEAT_SCHEDULE配置的,找到这个任务对应的调度项,把interval的seconds参数改成你需要的数值(比如改成30就是每30秒执行一次); - 要是用了数据库调度(比如django-celery-beat),就去后台或者数据库里找到这个任务的调度记录,调整执行间隔。
- 如果你是用Django的
另外还有个需要注意的小问题:你的日志里celery-worker容器和celery-beat容器都在执行同一个任务,这其实不符合正常的分工逻辑!正常来说Celery Beat只是个调度器,它的职责是把任务推送到消息队列,真正执行任务的应该是Celery Worker容器。出现这种情况大概率是你的Celery Beat启动命令写错了——比如不小心加了worker的启动参数,导致Beat同时兼任了Worker的角色,自己调度自己执行。你可以检查下Beat容器的启动命令,正确的Beat启动命令应该是类似:
celery -A your_django_project beat
而Worker的启动命令是:
celery -A your_django_project worker -l info
把两者的启动命令分开配置,就不会出现重复执行的情况啦。
备注:内容来源于stack exchange,提问作者Sujay S Badge
相关产品推荐
相关产品推荐

