[英]How to IPC between node and python using posix message queue?
我正在嘗試在節點js和python 3應用程序之間編寫IPC的“ hello world”。 目前,當新消息到達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)
節點:
const PosixMQ = require('posix-mq')
var mq = new PosixMQ();
mq.open({
name: '/fila1',
create: true,
mode: '0777',
maxmsgs: 10,
msgsize: 11
});
mq.push("hello world")
mq.close();
當第二個應用發送消息時,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 self._serializer.loads(data) File "/usr/lib/python3.7/site-packages/ipcqueue/serializers.py", line 14,
在負載中
return pickle.loads(data) KeyError: 101
[2]-退出1 python3 ../test-fila1.py [3] +完成節點index.js
編輯
因此,我決定將問題從“在節點和python應用之間加載ipc消息時出現KeyError:101”改為“如何使用posix消息隊列在節點和python之間進行IPC?”。 因為我只是注意到我發布的示例代碼每次運行時都會產生不同的錯誤。 現在發生的錯誤是(但是,未更改任何代碼):
追溯(最近一次通話):文件“ snippets / test-fila1.py”,
第9行
print('p1:Recebi na minha fila:'+ str(q1.get()))文件“ /usr/lib/python3.7/site-packages/ipcqueue/posixmq.py”,第174行,在
得到
返回self._serializer.loads(data)文件“ /usr/lib/python3.7/site-packages/ipcqueue/serializers.py”,第14行
在負載中
返回pickle.loads(data)
_pickle.UnpicklingError:取消堆棧下溢
如果您查看Queue
的__init__
class Queue(object):
"""
POSIX message queue.
"""
def __init__(self, name, maxsize=10, maxmsgsize=1024, serializer=PickleSerializer):
如您所見,默認的serializer
為PickleSerializer
,這意味着在您從nodejs
發送原始數據時,它假設隊列中的數據已被腌制。 修復很簡單,使用RawSerializer
from ipcqueue import posixmq
from time import sleep
from ipcqueue.serializers import RawSerializer
q1 = posixmq.Queue('/fila1', serializer=RawSerializer)
while True:
while q1.qsize() > 0:
print('p1: Recebi na minha fila: ' + str(q1.get()))
sleep(0.5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.