我目前正在尝试从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)
我希望我的代码能完成所有代码。
答案 0 :(得分:2)
此代码旨在在5个不同的进程中并行运行square_it
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个子流程之一中导入模块时会发生什么,与最初在主流程中加载模块时发生的事情相同:它会创建5个子流程中的另一个Pool
,它们会无限期地执行该操作。 / p>
为避免这种情况,您必须确保子流程不会递归地创建越来越多的子流程。您可以通过仅在“主”模块(也称为"__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)