python 鼠兔示例https://github.com/pika/pika/blob/main/examples/basic_consumer_threaded.py

gijlo24d  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(155)

我看过这个组的一些帖子,我不明白使用的意义是什么:https://github.com/pika/pika/blob/main/examples/basic_consumer_threaded.py
我的意思是,为什么我们需要一个额外的线程来处理消息和调用add_callback_threadsafe,其中我们传递ack方法作为参数(两个活动都在同一个新线程中进行处理)。我想知道我们如何防止表单关闭与我们使用消息的通道的连接,因为如果处理比心跳值长,我们会在之后发送ack,对我来说,这与在主线程中消耗相同,然后发送确认。如果我们在单独的一个线程中运行处理和发送确认,有什么区别?
我是新来的Python和鼠兔,所以对不起,如果这个问题是奇怪的
我不明白,我需要解释

nzk0hqpo

nzk0hqpo1#

如果处理时间长于heartbeat值,我们将在之后发送ack,对于我来说,这与在主线程中消费然后发送ack的情况相同
不,这是不正确的。如果你在主线程中消费,在发送ack之前处理消息所花费的时间BLOCKSPika的I/O循环,因为Pika的I/O循环运行在创建连接的任何线程(即主线程)上。这就是为什么你应该在一个单独的线程上工作。
下面是一些示例代码的逐行解释:https://groups.google.com/g/rabbitmq-users/c/grHdO0s6Owo/m/F6ULK0G0BgAJ
最近我回答了很多“Pika如何使用线程”的问题,它们归结为对线程、Pika和它的I/O循环的误解。Pika不会为I/O启动单独的线程。如果你在创建Pika连接的线程上工作,你会阻塞I/O循环。
注意,一般来说,任何执行I/O的程序或库都是在循环中执行的,这将阻塞创建循环的线程。一些库为此创建了一个专用线程,并对用户“隐藏”它,而Pika没有。

**注意:**Team RabbitMQ监控rabbitmq-users邮件列表,仅在有时回答StackOverflow上的问题。

相关问题