multiprocessing pool.map прекрасно работает на моем старом ПК, но не работает на новом ПК.
Висит при звонке на
def wait(self,timeout=None)
self._event.wait(timeout)
В этот момент загрузка ЦП падает до нуля без дальнейшего отклика, как будто он перешел в режим сна.
Я написал простой test.py следующим образом
import multiprocessing as mp
letters = ['A','B','C']
def doit(letter):
for i in range(1000):
print(str(letter) + ' ' + str(i))
if __name__ == '__main__':
pool = mp.Pool()
pool.map(doit,letters)
Это работает на старом ПК с i7-7700k (4cores, 8logical), python365-64bit, Win10Pro, PyCharm2018.1, где стандартный вывод отображает буквы и цифры в непоследовательном порядке, как и ожидалось.
Хотя этот же код не работает в новой сборке i9-7960 (16core-32logical), python37-64bit, Win10Pro, PyCharm2018.3
Новая версия BIOS для ПК не обновлялась с 2017/11 (на 4 месяца старше)
pool.py выглядит одинаково на обеих машинах (2006-2008 R Oudkerk)
Кодовая строка, где она висит в функции 'wait', ...
self._event.wait(timeout)
Любая помощь, пожалуйста, о том, где я мог бы искать дальше, чтобы найти причину.
Заранее спасибо.
....
РЕДАКТИРОВАТЬ::
Моя дальнейшая интерпретация -
1. GIL (глобальная блокировка интерпретатора) здесь не имеет значения, так как это относится только к многопоточности, а не к многопроцессорности.
2. multiprocessing.manager здесь не нужен, так как код потребляет статический ввод и производит независимый вывод. Таким образом, pool.close и pool.join также не требуются, так как я не являюсь результатом присоединения после обработки
3. Эта ссылка является хорошим введением в многопроцессорность, хотя здесь я не вижу решения.
https://docs.python.org/2/library/multiprocessing.html#windows