Python Multiprocessing Pipe hang



我正在尝试构建一个程序来发送字符串来处理 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]

相关内容

  • 没有找到相关文章

最新更新