芹菜工人立即接受了 5 份工作,尽管他们告诉他们不要这样做



>我开始我的芹菜工人

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

...

相关内容

  • 没有找到相关文章

最新更新