如何使用posix消息队列在节点和python之间进行IPC?

如何使用posix消息队列在节点和python之间进行IPC?,python,node.js,posix,ipc,mqueue,Python,Node.js,Posix,Ipc,Mqueue,我试图在一个节点js和一个python3应用程序之间编写一个IPC的“hello world”。目前,当一条新消息到达Python应用程序时,我遇到了一个解析错误。代码为: Python: from ipcqueue import posixmq from time import sleep q1 = posixmq.Queue('/fila1') while True: while q1.qsize() > 0: print('p1: Recebi na m

我试图在一个节点js和一个python3应用程序之间编写一个IPC的“hello world”。目前,当一条新消息到达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)
节点:

当第二个应用程序发送消息时,python应用程序将失败,原因是:

文件“./test-fila1.py”,第9行,在

print('p1: Recebi na minha fila: ' + str(q1.get()))   File "/usr/lib/python3.7/site-packages/ipcqueue/posixmq.py", line 174, in
得到

满载

return pickle.loads(data) KeyError: 101
[2] -出口1蟒蛇3../test-fila1.py [3] +完成节点索引.js

编辑
因此,我决定将问题从“KeyError:101在节点和python应用程序之间加载ipc消息时”改为“如何使用posix消息队列在节点和python之间进行ipc?”因为我刚刚注意到,我发布的示例代码每次运行时都会生成不同的错误。现在发生的错误是(但是,没有更改代码):

回溯(最后一次调用):文件“snippets/test-fila1.py”,
第9行,在
打印('p1:Recebi na minha fila:'+str(q1.get()))文件“/usr/lib/python3.7/site packages/ipcqueue/posixmq.py”,第174行,在
获取
返回self.\u serializer.load(数据)文件“/usr/lib/python3.7/site packages/ipcqueue/serializers.py”,第14行,
装载量
返回pickle.load(数据)
_pickle.UnpicklingError:取消pickle堆栈下溢


如果查看
队列的
\uuuu init\uuuu

类队列(对象):
"""
POSIX消息队列。
"""
def u uu init_uuuuu(self,name,maxsize=10,maxmsgsize=1024,serializer=PickleSerializer):
正如您所看到的,默认的
序列化程序
PickleSerializer
,这意味着当您从
节点js
发送原始数据时,它假定队列中的数据已被pickle。修复很简单,请使用
RawSerializer

从ipcqueue导入posixmq
从时间上导入睡眠
从ipcqueue.serializers导入RawSerializer
q1=posixmq.Queue('/fila1',serializer=RawSerializer)
尽管如此:
当q1.qsize()大于0时:
print('p1:Recebi na minha fila:'+str(q1.get()))
睡眠(0.5)

尝试从node.js发送对象,而不是原始字符串,例如mq.push({'data':'hello world');函数不接受它:
TypeError:第一个参数必须是node::Buffer或v8::String
尝试字符串化JSON对象消息。e、 g.message={'data':'hello world'}mq.push(JSON.stringify(message))是的,它还导致发生相同的错误:
\u pickle.UnpicklingError:invalid load key,{
return self._serializer.loads(data)   File "/usr/lib/python3.7/site-packages/ipcqueue/serializers.py", line 14,
return pickle.loads(data) KeyError: 101