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