芹菜:通过send_task同时排队多个(100-1000)任务?

时间:2019-09-04 16:22:11

标签: python rabbitmq celery kombu

我们经常需要使用Celery(由RabbitMQ支持)使许多消息入队(将它们分成1000组)。有没有人可以做到这一点?我们基本上是试图在一个send_task调用中“分批”大量消息。

如果我猜到了,我们将需要“更深入”,并涉足kombu甚至py-amqp

致谢,
尼古拉斯

2 个答案:

答案 0 :(得分:1)

无需“深入”并直接使用Kombu。 -很少有适合不同用例的解决方案:

  • 如果您更喜欢使用Celery工作流程,则可能希望利用chunks

  • 没有什么可以阻止您数千次调用send_task()了。

  • 如果调用send_task()的速度太慢,则可能要使用线程池,该线程池会同时向队列发送N个任务。

答案 1 :(得分:0)

我-至少是暂时完成的-通过以下方式确保芹菜连接保持打开状态:

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(...)

这样,我不必重新创建用于为每条消息生成的连接。