Django Celery 速率限制设置无法按预期工作

Django Celery Rate Limit setting doesn't work as expected

我使用以下命令创建一个工人:

celery -A proj worker -l info --concurrency=50 -Q celery,token_1 -n token_1

在我的任务中,我将速率限制设置为 4000/m

但是,当我开始 运行 收集时,我注意到处理的平均任务大约是 10-20/s(启用速率限制规则 4000/m)。 然后,我取消了速率限制规则,现在任务速率达到 60/s 左右。

我很困惑,因为我的速率限制是4000/m,相对65/s。为什么它最终只是10-20/s?????? (我已经给worker设置了50个线程....)

您误解了 celery 中的速率限制是如何运作的。 'According to the documentation on version 4.2:

The rate limits can be specified in seconds, minutes or hours by appending “/s”`, “/m” or “/h” to the value. Tasks will be evenly distributed over the specified time frame.

Example: “100/m” (hundred tasks a minute). This will enforce a minimum delay of 600ms between starting two tasks on the same worker instance.

本质上,celery 在你的任务之间添加了一个强制延迟。由于每个任务已经在大约 16 毫秒(1/60 秒)内完成处理,因此在任务之间再增加 16 毫秒的强制延迟会降低它们的处理速度。