0
我試圖建立一個程序來發送一個字符串來處理Tangki和Tangki2然後發送一些數組數據每個來處理Outdata,但它似乎不能正常工作。但是當我禁用Outdata的門時,一切都完美無瑕。Python多處理管道掛
這是示例代碼:
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