Python Pool.map()未终止,但仅在调试模式下终止

Python Pool.map()未终止,但仅在调试模式下终止,python,python-multiprocessing,Python,Python Multiprocessing,这不是我第一次在调试某些东西时遇到Pool()问题 请注意,我不尝试调试并行化的代码。我想调试代码,这些代码执行得要晚得多。问题是,从未到达此代码,原因是pool.map()未终止 我创建了一个简单的管道,它可以做一些事情。其中包括一个非常简单的文本数据预处理步骤 为了加快速度,我正在跑步: print('Preprocess text') with Pool() as pool: df_preprocessed['text'] = pool.map(preprocessor.prepr

这不是我第一次在调试某些东西时遇到
Pool()
问题

请注意,我不尝试调试并行化的代码。我想调试代码,这些代码执行得要晚得多。问题是,从未到达此代码,原因是
pool.map()
未终止

我创建了一个简单的管道,它可以做一些事情。其中包括一个非常简单的文本数据预处理步骤

为了加快速度,我正在跑步:

print('Preprocess text')
with Pool() as pool:
    df_preprocessed['text'] = pool.map(preprocessor.preprocess, df.text)
但问题是:

出于某种原因,此代码只运行一次。第二次,我在
pool.py
模块的
\u handle\u workers()
中陷入了无休止的循环:

@staticmethod
def _handle_workers(pool):
    thread = threading.current_thread()

    # Keep maintaining workers until the cache gets drained, unless the pool
    # is terminated.
    while thread._state == RUN or (pool._cache and thread._state != TERMINATE):
        pool._maintain_pool()
        time.sleep(0.1)
    # send sentinel to stop workers
    pool._taskqueue.put(None)
    util.debug('worker handler exiting')
注意
while
-循环。第二次调用预处理函数时,我的脚本就到此结束了

请注意:这仅在调试会话期间发生!如果脚本在没有调试器的情况下执行,则一切正常

这可能是什么原因


环境
$python--版本
Python 3.5.6::Anaconda公司。

更新 这可能是一个已知的bug


您使用pdb作为调试器?@AlexanderCécile Hm,这是个好问题。我使用的是PyCharm,它使用的是miniconda环境(Python 3.5.6)-不太确定它使用的是哪种调试器。您是否尝试过专家程序员的诊断技术,在任何地方都使用打印语句?哪个操作系统?您是第二次重新创建池还是使用现有池?@AlexanderCécile Yes-首选武器:高度复杂的标准输出信号调试。我很确定现在已经好了。在
preprocess()
(第一行)中调用
print()
,显示它第一次运行,但第二次就不再执行了。所以
pool.map()
什么都不做。你用pdb作为调试器吗?@AlexanderCécile Hm,这是个好问题。我使用的是PyCharm,它使用的是miniconda环境(Python 3.5.6)-不太确定它使用的是哪种调试器。您是否尝试过专家程序员的诊断技术,在任何地方都使用打印语句?哪个操作系统?您是第二次重新创建池还是使用现有池?@AlexanderCécile Yes-首选武器:高度复杂的标准输出信号调试。我很确定现在已经好了。在
preprocess()
(第一行)中调用
print()
,显示它第一次运行,但第二次就不再执行了。所以
pool.map()
什么都不做。