首页 > 解决方案 > 为什么 multiprocessing.Pool 不启动?对于带有一些处理的简单 I/O 案例

问题描述

我正在尝试将一些 cvs 读入数据帧,进行一些处理并再次保存结果(这次是对它们进行腌制)。我在 Windows 10 上运行 jupyter-notebook。

def clean_logs(filename : str):
    print('Started reading {fname}'.format(fname=filename))
    df = pd.read_csv('../datasets/complete_logs/{fname}'.format(fname=filename), index_col=0)
    print('Finished reading {fname}'.format(fname=filename))
    new_df = clean_logs_df(df)
    print('Finished cleaning {fname}'.format(fname=filename))
    new_df.to_pickle('../datasets/complete_logs_cleaned/{fname}.pkl'.format(fname=filename[:-4]))

我只添加了打印件,因此我可以在运行时遵循我的代码。基本上它需要一个文件名,读取该文件,处理它并再次保存它。

当我简单地这样做时:

for fname in logs_files:
    clean_logs(fname)

一切正常,我得到了所有的打印件。但是,如果我尝试这个:

n_threads = mp.cpu_count()

with mp.Pool(n_threads) as pool:
    try:
        pool.map(clean_logs, logs_files)
    except Exception:
        print(format_exc(sys.exc_info()))

我没有得到一张印刷品。出于某种原因,它只会永远阻止我的 jupyter-notebook。有人可以为我提供一些关于这方面的见解以及为什么会发生这种情况吗?

非常感谢您提前。

PS:我在 Manjaro Linux 上运行了类似于多“线程”版本的代码,没有任何问题。是的,mp.cpu_count() 正确地返回了 12,这没什么奇怪的。

标签: pythonpython-3.xwindowspandaspython-multiprocessing

解决方案


推荐阅读