python3 queue.put () блокирует основной процесс, когда размер очереди превышает определенное значение (1386).
Я использую 30 подпроцессов и две очереди для подсчета целого числа, каждый подпроцесс получает номер из первой очереди, а затем помещает этот номер во вторую очередь. Я вижу, как все подпроцессы успешно закрываются, но основной процесс заблокирован. дело в том, что когда длина номера меньше 1387, она работает хорошо. Python версия 3.7.0
#!/usr/bin/env python
from multiprocessing import Manager, Process, Lock, Queue
def work(q_in, o_out, process, lock):
print("process ", process, "start")
while 1:
lock.acquire()
if q_in.empty():
lock.release()
break
d1 = q_in.get(timeout=1)
o_out.put(d1*2)
print("in process ", process, " queue 2 size", o_out.qsize())
lock.release()
print("process ", process, "done")
if __name__ == '__main__':
length = 1386
q_in = Queue(length)
q_out = Queue(length)
for i in range(length):
q_in.put(i)
lock = Lock()
processes = list()
for i in range(30):
p = Process(target=work, args=(q_in, q_out, i, lock))
processes.append(p)
p.start()
[p.join() for p in processes]
print("main done")
если длина меньше 1386, я вижу "основное выполнено", но длина = 1387, все подпроцессы закрыты, но "основное выполнено" никогда не отображается, и основной процесс продолжает работать