【发布时间】:2014-03-19 20:17:06
【问题描述】:
我在 Python 中使用 RabbitMQ 来管理生产者和多个消费者之间的多个队列。在 RabbitMQ 网站 (routing model) 的示例中,消费者被阻止。这意味着它们在每次队列中有新的“任务”时停止在 start_sumption() 并执行回调函数。
我的问题是:我如何以一种仍在等待任务的方式实现我的消费者(因此,每次队列中有新事物时都会调用回调函数)但同时他可以执行其他任务工作/代码。
谢谢
【问题讨论】:
-
为什么不在单独的线程上运行
start_consuming()? -
好吧,我很容易找到解决方案。除了使用 basic_consume,我可以简单地在函数中使用 basic_get 并每隔 X 秒调用一次该函数。但是有一个问题:队列任务会按照某种顺序交付吗?
-
@HugoSousa 如果你能在这里发布一个完整的解决方案会很棒 - 我是 rabbitmq 的新手,它真的会帮助其他人。
-
另一种选择是使用 pika 和 Tornado 完全异步 (pika.readthedocs.org/en/latest/examples/tornado_consumer.html)
-
@goncalopp 根据FAQ,pika 不是线程安全的
标签: python asynchronous parallel-processing queue rabbitmq