Python multiprocessing.Manager (). Queue (): тупик при попытке присоединиться к процессам - PullRequest
0 голосов
/ 15 декабря 2018

Я внедряю многопроцессорный сканер веб-страниц.Я использовал Manager (). Queue () для создания очереди с именами файлов, которые будет загружен сканером.Все процессы имеют одну и ту же очередь, и они также выполняют операции put () и get () в очереди.Когда я читал о классе Queue (), он является поточно-ориентированным и может сделать мою очередь блокирующей, и это решает проблему процесса, пытающегося получить () элемент из пустой очереди.Однако возникает другая проблема: когда очередь наконец имеет только несколько элементов, некоторый процесс, скажем, процесс 1, обнаруживает, что он не пуст, и затем все эти элементы выталкиваются другим процессом, скажем, процессом 2, а затем процесс 1 пытаетсяget () элемент из очереди, но обнаруживает, что он пуст, поэтому его вызов get () блокируется навсегда.

Попытка решения: разрешить тайм-аут для get (), поэтому при возникновении тайм-аута get ()вызовите исключение «очередь пуста» и после этого завершите процесс

Но похоже, что это решение не сработает, потому что иногда программа застревает на этапах process.join ().

Может ли кто-нибудь помочь мне с этим?Мой английский не очень хорош, но я был бы очень признателен, если бы вы подумали об этой проблеме.Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...