使用 multiprocessing.pool.Pool 初始化并行处理无限期冻结

Using multiprocessing.pool.Pool to initialize parallel processing freezes indefinitely

我目前正在尝试 运行 从 anaconda 中的 spyder 控制台并行化代码。我认为问题可能出在我的计算机不允许 anaconda 控制 CPU 核心,但我不确定如何解决此问题。

另一个有趣的点是,当我 运行 一个异步示例时,但是当我尝试生成结果时,我收到了同样的问题。

我已经尝试了多个应该有效的简单示例。没有包加载错误

from multiprocessing.pool import ThreadPool, Pool

def square_it(x):
    return x*x

# On Windows, make sure that multiprocessing doesn't start
# until after "if __name__ == '__main__'" 

with Pool(processes=5) as pool:
     results = pool.map(square_it, [5, 4, 3, 2 ,1])

print(results) 

我希望我的代码能够完成所有代码。

此代码旨在 运行 square_it 在 5 个不同的进程中并行

def square_it(x):
    return x*x

with Pool(processes=5) as pool:
    results = pool.map(square_it, [5, 4, 3, 2 ,1])

print(results)

它的作用是创建 5 个新进程,然后在每个进程中加载​​相同的 python 模块并调用函数 square_it

在 5 个子进程之一中导入模块时发生的事情与最初在主进程中加载​​时发生的事情相同:它创建另一个 Pool 5 个子进程,无限期地这样做.

为避免这种情况,您必须确保子进程不会递归地创建越来越多的子进程。您可以通过仅在 "main" 模块中创建子流程来做到这一点,又名 "__main__":

def square_it(x):
    return x*x

if __name__ == "__main__":
    with Pool(processes=5) as pool:
         results = pool.map(square_it, [5, 4, 3, 2 ,1])

    print(results)