Исключение, выдаваемое в pool.close () во время отладки, но не во время работы - PullRequest
4 голосов
/ 01 мая 2019

Я не думаю, что столкнулся с этой проблемой, работая над этим в Python 2.7, но при отладке в 3.7 Python выдает исключение при вызове pool.close(). Это соответствующая часть функции:

pool = multiprocessing.Pool(6)
iterator = pool.imap_unordered(worker_func, worker_input)

while True:
    try:
        t0, t1 = next(iterator)
    except multiprocessing.TimeoutError:
        continue
    except StopIteration:
        break
    else:
        dbinserts1(t0)
        dbinserts2(t1)            

pool.close()
pool.join()

Единственное изменение, сделанное 2to3, переписывало iterator.next() как next(iterator). Функция завершается ошибкой только во время отладки (в PyCharm), в противном случае она работает успешно. Это (вероятно) наиболее значимая часть трассировки стека:

Ошибка в atexit._run_exitfuncs: трассировка (последний последний вызов):
файл "/Usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/util.py", строка 322, в _exit_function Файл p.join () "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", строка 138, в соединении assert self._parent_pid == os.getpid (), 'может присоединиться только к дочернему процессу'
AssertionError: может присоединиться только к дочернему процессу

1 Ответ

1 голос
/ 08 мая 2019

Какую версию PyCharm вы используете? Похоже, что это исправлено в 2019.1.2 https://youtrack.jetbrains.com/issue/PY-34436

...