我正在使用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个任务添加到队列中。
答案 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