我试图在一个名为“IPC”的应用程序之间编写一个名为“IPC”的应用程序。目前,当一条新消息到达Python应用程序时,我遇到了一个解析错误。代码是:
Python:
from ipcqueue import posixmq
from time import sleep
q1 = posixmq.Queue('/fila1')
while True:
while q1.qsize() > 0:
print('p1: Recebi na minha fila: ' + str(q1.get()))
sleep(0.5)
节点:
^{pr2}$当第二个应用程序发送消息时,python应用程序失败:
File "../test-fila1.py", line 9, in
print('p1: Recebi na minha fila: ' + str(q1.get())) File "/usr/lib/python3.7/site-packages/ipcqueue/posixmq.py", line 174, in
get
return self._serializer.loads(data) File "/usr/lib/python3.7/site-packages/ipcqueue/serializers.py", line 14,
in loads
return pickle.loads(data) KeyError: 101
[2]- Exit 1 python3 ../test-fila1.py [3]+ Done node index.js
编辑
因此,我决定将问题从“keyrerror:101 when loading ipc message between node and python apps”改为“How to ipc between node and python using posix message queue?”因为我刚刚注意到,我发布的示例代码在每次运行它们时都会生成不同的错误。现在发生的错误是(但是,没有更改代码):
Traceback (most recent call last): File "snippets/test-fila1.py",
line 9, in
print('p1: Recebi na minha fila: ' + str(q1.get())) File "/usr/lib/python3.7/site-packages/ipcqueue/posixmq.py", line 174, in
get
return self._serializer.loads(data) File "/usr/lib/python3.7/site-packages/ipcqueue/serializers.py", line 14,
in loads
return pickle.loads(data)
_pickle.UnpicklingError: unpickling stack underflow
如果您查看
Queue
的__init__
如您所见,默认的
^{pr2}$serializer
是PickleSerializer
,这意味着当您从nodejs
发送原始数据时,它假设队列上的数据被pickle。修复很简单,使用RawSerializer
相关问题 更多 >
编程相关推荐