В многопроцессорной обработке python .get () всегда отключается, даже в известном коде - PullRequest
0 голосов
/ 03 апреля 2019

Мой многопроцессорный код, кажется, работает нормально, пока я не попытаюсь показать некоторые результаты с помощью .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 () работает вечно, потому что почти каждый фрагмент кода, который я нахожу для многопроцессорной обработки, кажется, использует его просто отлично.

...