Celery - 添加 7000 个 apply_async 任务需要 12 秒

Celery - adding 7000 tasks with apply_async takes 12 seconds

我正在使用 Celery 将任务分发到多个服务器。出于某种原因,将 7,000 个任务添加到队列中的速度非常慢,而且似乎受到了 CPU 的限制。执行下面的代码需要 12 秒,这只是将任务添加到队列中。

start = time.time()
for url in urls:
    fetch_url.apply_async((url.strip(),), queue='fetch_url_queue')
print time.time() - start

在broker之间切换(试过redis、RabbitMQ、pyamqp)没有明显效果。

减少工作人员数量(每个 运行 在自己的服务器上,与添加任务的主服务器分开)没有任何显着影响。

传递的 URL 非常小,每个大约 80 个字符。

我的配置中任意两个给定服务器之间的延迟是亚毫秒 (<1ms)。

我一定是做错了什么。当然,Celery 必须能够在不到几秒的时间内将 7,000 个任务添加到队列中。

任务排队的速率取决于您使用的 celery 代理和您的服务器 cpu。

使用 AMD A4-5000 CPU 和 4GB 内存,这里是各种代理的任务率

# memory -> 400 tasks/sec
# rabbitmq -> 220 tasks/sec
# postgres -> 30 tasks/sec

配备英特尔(R) 至强(R) CPU E5-2676 v3 @ 2.40GHz 和 4GB 内存

# memory -> 2000 tasks/sec
# rabbitmq -> 1500 tasks/sec
# postgres -> 200 tasks/sec