芹菜工作者在由rate_limit设置的冷却时抓住任务

时间:2015-03-08 18:52:24

标签: python mongodb queue celery rate-limiting

我的任务包括顺序请求(第一个请求的数据需要第二个等等)到API,它对一个主机有速率限制。所以我试图通过使用Celery来管理几个工人来提高速度。但是有几个正在运行的工作人员任务不均匀分配。因此,虽然有免费工作人员,但工作人员会进行冷却,这会显着降低整体处理速度。

演示此问题的代码:

from celery import Celery
app = Celery('tasks', backend='mongodb', broker='mongodb://localhost:27017/celery')

app.conf.update(
    CELERY_ACKS_LATE = True,
    CELERYD_CONCURRENCY = 1,
    CELERYD_PREFETCH_MULTIPLIER = 1,
)

@app.task(rate_limit='10/m')
def mytask():
    return 'ok'

如果你启动了几个工人(有或没有-Ofair选项)并运行以下代码:

while True:
    tasks.mytask.apply_async().get()

任务不会均匀分布,您几乎每次都可以轻松地看到该任务被裁员。

对于这类问题,Celery配置是对的吗?

0 个答案:

没有答案