1

pika文档中的描述中,我无法完全了解add_callback_threadsafe()方法的作用。它说,“在此连接线程的上下文中尽快请求调用给定函数”。具体来说,这个回调与哪个事件相关联?由于add_callback_threadsafe()没有收到任何“事件”参数,如何pika知道何时调用该回调?

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

4

1 回答 1

1

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

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

我们不能在 time.sleep() 结束后调用 ack_message() 方法吗?

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

于 2021-05-07T22:05:15.743 回答