我的任务包括顺序请求(第一个请求的数据需要第二个等等)到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配置是对的吗?