# this thing always called in a green thread; forget about pools and queues.
def on_message(msg):
# you're in a green thread now; just process away!
benefit_from("all the gevent goodness!")
spawn_and_join_10_sub_greenlets()
rabbitmq_channel.register_callback(lambda msg: gevent.spawn(on_message, msg))
首先定义
Queue
:然后,在线程中,尝试从该队列中获取项目:
^{pr2}$这将阻塞整个线程,直到在队列中找到某些内容为止。在
现在,同时,假设您的传入事件通过触发回调得到通知,您将注册一个回调,该回调只将接收到的RabbitMQ消息放入队列中:
或者如果你喜欢简短的代码:
(以上是伪代码,因为我没有使用RabbitMQ,也没有为RabbitMQ使用任何Python绑定,但是您应该能够很容易地找出如何使代码片段适应您的实际应用程序代码;需要注意的关键部分是
q.put(msg)
-只要确保在收到新消息时立即调用该部分即可。)一旦发生这种情况,线程就会被唤醒并可以自由地处理消息。为了对多个消息重用同一个线程,只需使用
while
循环:另外,我建议您研究一下Gevent,以及如何在Python应用程序中将其与RabbitMQ结合起来,这样就可以摆脱线程,使用更轻量级和可伸缩的绿色线程机制,而不必管理线程池(因为您可以在飞行):
相关问题 更多 >
编程相关推荐