我正在尝试构建一个程序来发送字符串来处理 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 将所有数据转储到 pipe 中。
编辑:似乎唯一的问题是tangki和tangki2之间的通信到数据
实际上是因为缓冲区大小限制? 但是添加dout=[x,y,degree,tinggi]
和dout=[x,y,degree,tinggi]
将数据大小重置为最小,或者通过在selang1.send(dout)
和selang2.send(dout2)
之后立即分配dout=[0,0,0,0]
和dout2=[0,0,0,0]