问题描述
根据 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()。