Многопроцессорная обработка Python pool.map self._event.wait (timeout) зависает.Почему пул pool.map не отвечает? - PullRequest
0 голосов
/ 23 января 2019

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

...