>我开始我的芹菜工人
celery -A workerTasks worker --concurrency 1
在 django 的 settings.py 中,我还有:
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_worker_prefetch_multiplier = 1
但是工人在连接到芹菜经纪人后仍然会消耗 5 个任务。
我错过了什么?
好的,所以我的错误是我在服务器端而不是工人端设置配置。 创建 Celery 应用程序时,我可以像这样显式设置配置:
app = Celery('workerTasks', broker='whatever')
app.conf['worker_prefetch_multiplier'] = 1
如果你仍然想使用 Django 的芹菜 settings.py,你应该用 CELERY_WORKER_PREFETCH_MULTIPLIER 替换 CELERYD_PREFETCH_MULTIPLIER
CELERY_WORKER_PREFETCH_MULTIPLIER = 1
https://docs.celeryq.dev/en/stable/history/whatsnew-4.0.html#django-support
对于 Django 用户和其他想要保留大写名称的人
如果你从 Django 设置模块加载 Celery 配置,那么你需要继续使用大写名称。
您还希望使用 CELERY_ 前缀,以便不会有 Celery 设置与其他应用程序使用的 Django 设置发生冲突。为此,您首先需要将设置文件转换为使用新的一致命名方案,并将前缀添加到所有与 Celery 相关的设置中:
$ celery upgrade settings proj/settings.py --django
升级设置文件后,您需要在 proj/celery.py 模块中显式设置前缀:
app.config_from_object('django.conf:settings', namespace='CELERY')
可能是您现在使用 Celery 4.x 并且它不会选择worker_prefetch_multiplier
设置,因为您使用大写设置?从 4.0 开始,Celery 使用所有小写配置值(这是有据可查的(。
您可以通过运行以下命令轻松检查: celery -A workerTasks inspect conf
.
如果您的并发级别为 1,worker_prefetch_multiplier
为 1,并且如果您运行 5 个工作线程,他们将立即运行 5 个任务,并预取额外的 5