celery beat之windows环境的使用

背景

前期使用Flask + Celery + Redis搭建了一个后台定时任务,由于服务器是windows环境,在部署后,启动celery beat出现了如下的报错:

1
2
E:\Python\WorkSpace\hzinfo>celery worker -A manage.celery -B --loglevel=info
-B option does not work on Windows. Please run celery beat as a separate service.

解决办法

既然提示说需要单独运行celery beat,那么还是分步进行:

  • 启动celery:

    1
    start /b celery worker -A manage.celery --loglevel=info -c 1 -f "celery_app/celery.log"
  • 启动celery beat:

    1
    celery -A manage.celery beat -s "celery_app/celerybeat-schedule"
  • 启动flask:

    1
    python manage.py runserver

在程序中,配置的是晚上18点35分执行任务,执行情况如下:

  • celery beat窗口:

    1
    [2019-05-29 18:35:00,006: INFO/MainProcess] Scheduler: Sending due task fw_pool_src_sync (app.firewall.fwPoolSync.src_sync)
  • celery主程序中指定为log文件中:

    1
    2
    3
    [2019-05-29 18:35:00,006: INFO/MainProcess] Received task: app.firewall.fwPoolSync.src_sync[f7e89a84-caaa-42dd-a799-d939fb5d95b4]
    [2019-05-29 18:35:23,858: INFO/Worker-1] start
    [2019-05-29 18:35:23,904: INFO/MainProcess] Task app.firewall.fwPoolSync.src_sync[f7e89a84-caaa-42dd-a799-d939fb5d95b4] succeeded in 23.8989999294s: success!

扩展

果然部署服务器还是Linux比较好,windows就比较麻烦。看了下celery官网,并没有针对不同的操作系统进行区分。

更多可参考:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#starting-the-scheduler