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