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 毫秒的强制延迟会降低它们的处理速度。
我使用以下命令创建一个工人:
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 毫秒的强制延迟会降低它们的处理速度。