Описание проблемы: я выполняю многопроцессорную обработку в Python и использую multiprocessing.Pipe() для связи между процессами. Я много искал, но все еще не мог найти способ определить, заполнена ли труба или нет. Например, ниже процесс writePipe продолжает помещать число в 2 разных канала (нечетный и четный), а процесс readPipe постоянно считывает данные из этих 2 каналов. Однако скорость чтения из нечетной трубы намного выше, поэтому четная труба будет заполнена. В этот момент процесс writePipe будет заблокирован, в то время как процесс readPipe все еще ожидает чтения из Odd Pipe, что вызывает взаимоблокировку.
Мой вопрос: есть ли способ определить, что канал заполнен, чтобы мы могли прекратить вводить число в заполненный канал, пока он еще работает, и поместить число в канал, в котором все еще есть пробелы?
from multiprocessing import Process, Pipe
def writePipe(sendNumberOdd, sendNumberEven):
i = 0
while True:
if i % 2 == 0:
sendNumberEven.send(i)
else:
sendNumberOdd.send(i)
i += 1
def readPipe(recvNumberOdd, recvNumberEven):
countEven = 0
while True:
countEven += 1
print(countEven, recvNumberEven.recv())
countOdd = 0
while countOdd < 50:
countOdd += 1
print (countOdd, recvNumberOdd.recv())
if __name__ == '__main__':
recvNumberOdd, sendNumberOdd = Pipe(duplex=False)
recvNumberEven, sendNumberEven = Pipe(duplex=False)
write = Process(target=writePipe, args=(sendNumberOdd, sendNumberEven))
read = Process(target=readPipe, args=(recvNumberOdd, recvNumberEven))
write.start()
read.start()
sendNumberOdd.close()
sendNumberEven.close()