pika 中 add_callback_threadsafe() 方法有什么用?

问题描述

根据 pika 文档中的描述,我不太明白 add_callback_threadsafe() 方法的作用。它说,“在此连接的线程的上下文中尽快请求对给定函数调用”。具体来说,这个回调与哪个事件相关联?既然 add_callback_threadsafe() 没有收到任何“事件”参数,那么 pika 如何知道何时调用该回调?

另外,在官方的例子中,为什么我们甚至需要构建偏函数并在 do_work() 方法注册回调?我们不能在 ack_message() 结束后调用 time.sleep() 方法吗?

解决方法

该方法存在的原因: How to add multiprocessing to consumer with pika (RabbitMQ) in python

如果您对多个线程/进程使用相同的兔子连接/通道,那么您很容易崩溃。如果您想避免这种情况,则需要使用该方法。

我们可以不只是在调用之后调用 ack_message() 方法吗? time.sleep() 结束了吗?

不,您会从与主线程不同的线程调用 ack_message,这不是线程安全的并且容易崩溃。您需要从线程安全上下文中调用 ack_message,即 add_callback_threadsafe()。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...