【发布时间】:2019-09-04 16:22:11
【问题描述】:
我们经常需要使用 Celery(由 RabbitMQ 支持)将许多消息排入队列(我们将它们分成 1000 个组)。有没有人有办法做到这一点?我们基本上是在尝试在一个send_task 呼叫中“批处理”一大组消息。
如果我猜的话,我们需要“更深入”一步并连接到kombu 甚至py-amqp。
问候,
尼克拉斯
【问题讨论】:
标签: python rabbitmq celery kombu
我们经常需要使用 Celery(由 RabbitMQ 支持)将许多消息排入队列(我们将它们分成 1000 个组)。有没有人有办法做到这一点?我们基本上是在尝试在一个send_task 呼叫中“批处理”一大组消息。
如果我猜的话,我们需要“更深入”一步并连接到kombu 甚至py-amqp。
问候,
尼克拉斯
【问题讨论】:
标签: python rabbitmq celery kombu
无需“深入”并直接使用 Kombu。 - 适用于不同用例的解决方案很少:
如果您更喜欢使用 Celery 工作流程,您可能希望利用 chunks。
没有什么能阻止您调用 send_task() 数千次。
如果调用 send_task() 太慢,您可能需要使用一个线程池来同时将 N 个任务发送到队列。
【讨论】:
我 - 至少暂时 - 最终做的是确保保持 celery 连接打开,通过:
with celery.Celery(set_as_current=False) as celeryapp:
...
with celeryapp.connection_for_write(connect_timeout=connection_timeout) as conn:
for message in messages:
celeryapp.send_task(...)
这样我就不必为每条消息重新创建连接。
【讨论】: