阻塞获取 aio_pika

Posted

技术标签:

【中文标题】阻塞获取 aio_pika【英文标题】:Blocking get aio_pika 【发布时间】:2018-11-17 04:49:21 【问题描述】:

我期待

await queue.get() 

在 aio_pika 中阻塞,但即使我没有设置超时参数,我也会立即收到错误:

aio_pika.exceptions.QueueEmpty

无论如何要在 aio_pika 中获得阻塞?

编辑: 这是迄今为止我能想到的最好的。

   while True:
        msg = await q.get(fail=False)
        if msg:
            break
        await asyncio.sleep(1)

【问题讨论】:

即使设置了超时,我也会收到QueueEmpty。这是一个已知的错误吗? 【参考方案1】:

RabbitMQ 团队会监控 the rabbitmq-users mailing list,但有时只会在 *** 上回答问题。


根据documentation for that method,您应该使用很长的超时时间。似乎没有其他方法可以做到这一点。

【讨论】:

第一段是多余的:默认情况下,*** 问题针对的是 *** 社区的回答者,而不是特定产品的开发团队。给定的信息可能有用,但它属于对问题的评论。 设置较长的超时时间似乎是获得错误的可靠方法,因为无法保证成功。 然后使用短暂的超时,检查响应,并采取适当的行动。 @user4815162342 - 作为 RabbitMQ 核心团队的一员,我的目标是让 SO 用户知道该站点不是 RabbitMQ 社区支持的主要方式 - 邮件列表才是。 就像我说的那样,没有问题,但是那种东西属于评论。

以上是关于阻塞获取 aio_pika的主要内容,如果未能解决你的问题,请参考以下文章

好好聊聊同步异步阻塞非阻塞

非阻塞获取字符

通过阅读python subprocess源码尝试实现非阻塞读取stdout以及非阻塞wait

阻塞非阻塞,同步异步总结

java并发之阻塞队列

Java阻塞队列的实现