文件修改时自动重新运行 Celery 的 Worker

下面介绍实现 autoreload 两种方式:

  • 使用 Watchdog

    Watchdog 的 watchmedo 命令可以监控某个目录下的文件修改,重新运行子进程。我们可以利用它实现 Celery worker 的自动重新运行。

你可以直接使用 start-celery-for-dev.py ,它就是基于 watchdog 实现的。

  • 使用 Django
    Django 本身有个机制是监控程序文件改变然后自动重新运行 runserver 命令,我们可以利用这个机制来实现:

解决 Windows 上运行 Celery 4.1 问题:ValueError: not enough values to unpack

Celery 4.1 的这个问题只在 Windows 上有,Celery 4.1 开发环境所限并不能完美兼容 Windows

这个问题有三解决方法:

  1. 使用别的 pool
    在创建 worker 时使用别的 pool,例如 eventlet、solo

    celery -A tasks worker –loglevel=info –pool=eventlet

  2. 设置环境变量 FORKED_BY_MULTIPROCESSING
    在创建 worker 时设置一下环境变量

    set FORKED_BY_MULTIPROCESSING=1

  3. 使用旧版本的 Celery