Мой многопроцессорный код, кажется, работает нормально, пока я не попытаюсь показать некоторые результаты с помощью .get (), где он будет зависать вечно, если я не использую .get (timeout = 5), где я получаю ошибку, сообщающую, что время истекло. Я использую код непосредственно со страницы документации по многопроцессорной обработке, чтобы гарантировать отсутствие ошибок.
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print(q.get(timeout=5)) # prints "[42, None, 'hello']"
p.join()
---------------------------------------------------------------------------
Empty Traceback (most recent call last)
<ipython-input-14-6adfdb672fe3> in <module>
8 p = Process(target=f, args=(q,))
9 p.start()
---> 10 print(q.get(timeout=5)) # prints "[42, None, 'hello']"
11 p.join()
~\Anaconda3\lib\multiprocessing\queues.py in get(self, block, timeout)
103 timeout = deadline - time.monotonic()
104 if not self._poll(timeout):
--> 105 raise Empty
106 elif not self._poll():
107 raise Empty
Empty:
Я действительно понятия не имею, почему .get () работает вечно, потому что почти каждый фрагмент кода, который я нахожу для многопроцессорной обработки, кажется, использует его просто отлично.