首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pika线程执行出现错误- 505,'UNEXPECTED_FRAME

Pika线程执行出现错误- 505,'UNEXPECTED_FRAME
EN

Stack Overflow用户
提问于 2018-03-07 14:33:03
回答 1查看 1.1K关注 0票数 0

我知道pika不是线程安全的,我试图使用锁访问通道,但仍然会出错:

代码语言:javascript
复制
pika.exceptions.ConnectionClosed: (505, 'UNEXPECTED_FRAME - expected content header for class 60, got non content header frame instead')

PS我不能使用不同的频道。

我能做什么?谢谢你提前提供帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-07 15:01:11

您需要重新设计您的应用程序或选择另一个Rabbitmq库而不是Pika。锁不能使皮卡线安全。每个线程需要有一个单独的连接。

您有几个选项,但它们都没有使用锁那么简单。

其中之一就是用Kombu代替Pika。Kombu是线程安全的,但它的界面与Pika非常不同(在我看来更简单,但这是主观的)。

如果您想继续使用Pika,那么您需要重新设计您的兔子界面。我不知道你为什么“不能”使用不同的频道。但是,一种可能的方法是让单个线程与兔子进行接口,该线程将与执行任务的工作线程与接收到的数据进行交互,并且您将通过队列与它们进行通信。通过这种方式,您的兔子线程将读取数据,将接收到的数据发送到队列中的工作人员,通过另一个队列接收工作人员的回答,然后将它们作为响应提交给兔子。

您还可以解开通信协议中的某些内容,这样您实际上可以使用不同的通道,并且每个线程可以独立地与它们自己的连接和通道进行接口。这是我通常使用的方法。

还有一个选择是摆脱线程,转而使用异步方法。您的应用程序可能适合,也可能不适合。

但是没有简单的解决办法,如果您尝试在线程之间共享Pika对象,您最终会遇到奇怪的行为或异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49154404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档