Это очень маленький скрипт замерзает после выполнения:скрипт зависает после ввода много элементов в очереди
from multiprocessing import Queue
q = Queue()
for x in range(10000):
q.put("hello")
print "ok"
Он печатает «ОК» правильно, но тогда просто не заканчивается, и я должен вручную убить процесс. Я проверил вывод q.full()
, и он всегда возвращает False
. Если добавить второй цикл, который получает все элементы из очереди заканчивается правильно:
for x in range(10000):
q.get()
Если я уменьшить число до 1000, он также заканчивается правильно. Так в чем проблема? Есть ли какой-то предел, о котором я не знаю, или я неправильно понимаю что-то фундаментальное в отношении очередей?
EDIT
То же самое происходит, если я использую трубу вместо очереди:
output_p, input_p = Pipe()
for x in range(10000):
input_p.send("hello")
Спасибо! Мне действительно удалось заставить его работать с помощью 'cancel_join_thread()'. Я до сих пор не знаю, почему это происходит на этом произвольном числе. – basilikum