当我阻塞channel.start_consuming()
长时间运行的IOLoop时,我遇到了ConnectionResetError
的问题。我读了这段代码:
https://github.com/pika/pika/blob/0.12.0/examples/basic_consumer_threaded.py
在此代码中,作业在后台线程中运行。
问题是,当我的作业在线程中运行时,工人仍然可以采取更多的作业,(即,不断获得on_message回调)。但我不希望我的员工一次处理多个作业。
我该怎么办?是否可以通知队列工作者“忙碌”,并且在一段时间内不能接受作业?
1条答案
按热度按时间tkclm6bt1#
只要您通过
channel.basic_qos
方法设置通道的QoS值,您的消费者就不会收到比prefetch_count
指定的更多的未确认消息。如果您使用
prefetch_count=1
参数,您的消费者一次只能获得一条消息,并且在为该消息调用basic_ack
之前不会获得更多消息。如果出于某种原因,你看到了一些不同的东西,请在
pika-python
邮件列表的邮件中以附件或链接的形式分享你的所有代码,我会检查的。