我正在尝试构建一个程序来发送一个字符串来处理Tangki和Tangki2,然后发送一些数组数据来处理Outdata,但它似乎无法正常工作。但当我禁用Outdata的门时,一切都完美无瑕。
这是示例代码:
import os
from multiprocessing import Process, Pipe
from time import sleep
import cv2
def outdata(input1,input2):
while(1):
room=input1.recv()
room2=input2.recv()
def tangki(keran1,selang1): ##============tangki1
a=None
x,y,degree,tinggi=0,0,0,0
dout=[]
while(1):
frame=keran1.recv()
dout.append([x,y,degree,tinggi])
selang1.send(dout)
print ("received from: {}".format(frame))
def tangki2(keran3,selang2): ##=================tangki2
x,y,degree,tinggi=0,0,0,0
dout2=[]
while(1):
frame=keran3.recv()
dout2.append([x,y,degree,tinggi])
selang2.send(dout2)
print("received from: {}".format(frame))
def pompa(gate1,gate2):
count=0
while(1):
count+=1
gate1.send("gate 1, val{}".format(count))
gate2.send("gate 2, val{}".format(count))
if __name__ == '__main__':
pipa1, pipa2 = Pipe()
pipa3, pipa4 = Pipe()
tx1,rx1 = Pipe()
tx2,rx2 = Pipe()
ptangki = Process(target=tangki, args=(pipa2, tx1))
ptangki2 = Process (target=tangki2, args=(pipa4, tx2))
ppompa = Process(target=pompa, args=(pipa1,pipa3))
keran = Process(target=outdata, args=(rx1,rx2))
ptangki.start()
ptangki2.start()
ppompa.start()
keran.start()
ptangki.join()
ptangki2.join()
ppompa.join()
keran.join()
在准确计数达到108时,该过程挂起,没有任何响应。当我TOP它,python3进程已经消失,似乎selang1和selang2导致了问题。我在谷歌搜索它可能是一个管道死锁。所以问题是如何防止这种情况发生,因为我已经通过在input1和input2中重复读取而将所有数据转储到管道中。
编辑:似乎唯一的问题是tangki和tangki2之间的沟通与outdata
答案 0 :(得分:0)
它实际上是因为缓冲区大小限制?但添加dout=[x,y,degree,tinggi]
和dout=[x,y,degree,tinggi]
会将数据大小重置为最小,或者在dout=[0,0,0,0]
和dout2=[0,0,0,0]
之后立即分配selang1.send(dout)
和selang2.send(dout2)