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

时间:2018-02-06 21:31:16

标签: python redis rabbitmq celery eventlet

我正在使用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

在代理之间切换(尝试过redis,RabbitMQ和pyamqp)没有任何重大影响。

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

传递的网址非常小,每个只有大约80个字符。

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

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

1 个答案:

答案 0 :(得分:2)

任务排队的速度取决于您使用的芹菜经纪人和您的服务器CPU。

使用AMD A4-5000 CPU&amp; 4GB内存,这是各种经纪人的任务率

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

Intel(R)Xeon(R)CPU E5-2676 v3 @ 2.40GHz&amp; 4GB内存

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