gpt4 book ai didi

python - 鼠兔,stop_consuming 不起作用

转载 作者:太空狗 更新时间:2023-10-29 20:24:11 27 4
gpt4 key购买 nike

我是 rabbitmq 和 pika 的新手,在停止消费方面遇到了麻烦。

channel 和队列设置:

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue=new_task_id, durable=True, auto_delete=True)

基本上,消费者和生产者是这样的:

消费者:

def task(task_id):
def callback(channel, method, properties, body):
if body != "quit":
print(body)
else:
print(body)
channel.stop_consuming(task_id)

channel.basic_consume(callback, queue=task_id, no_ack=True)
channel.start_consuming()
print("finish")
return "finish"

制作人:

proc = Popen(['app/sample.sh'], shell=True, stdout=PIPE)
while proc.returncode is None: # running
line = proc.stdout.readline()
if line:
channel.basic_publish(
exchange='',
routing_key=self.request.id,
body=line
)
else:
channel.basic_publish(
exchange='',
routing_key=self.request.id,
body="quit"
)
break

消费者 task 给了我输出:

# ... output from sample.sh, as expected

quit
�}q(UstatusqUSUCCESSqU tracebackqNUresultqNUtask_idqU
1419350416qUchildrenq]u.

然而,"finish" 没有被打印出来,所以我猜这是因为 channel.stop_consuming(task_id) 没有停止消费。如果是这样,正确的做法是什么?谢谢。

最佳答案

我遇到了同样的问题。这似乎是因为在内部,start_consuming 调用了 self.connection.process_data_events(time_limit=None)。这 time_limit=None 使其挂起。

我设法通过用它的实现替换对 channel.start_consuming() 的调用来解决这个问题,被黑了:

while channel._consumer_infos:
channel.connection.process_data_events(time_limit=1) # 1 second

关于python - 鼠兔,stop_consuming 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com