gpt4 book ai didi

python - Python中多重处理后的后处理结果

转载 作者:行者123 更新时间:2023-12-01 01:27:50 25 4
gpt4 key购买 nike

所以我有一个简单的 MP 代码,它的作用就像一个魅力。然而,当我对通过 MP 生成的数据进行非常简单的后处理时,代码不再起作用。它永远不会停止并永远运行!这是代码(并且再次完美运行):

import numpy as np
from multiprocessing import Pool

n = 4
nMCS = 10**5

def my_function(j):
result = []
for j in range(nMCS // n):
a = np.random.rand(10,2)
result.append(a)
return result

if __name__ == '__main__':
__spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)" # this is because I am using Spyder!

pool = Pool(processes = n)

data = pool.map(my_function, [i for i in range(n)])

pool.close()
pool.join()

#final_result = np.concatenate(data) ### this is what ruins my code! ###

同时,如果我在最后添加 final_result = np.concatenate(data) ,它永远不会起作用!我正在使用 Spyder,如果我在 MP 完成后在控制台中简单地输入 final_result = np.concatenate(data) ,它就会给我我想要的东西,即一个串联列表。但是,如果我将这一简单的行放在主程序的最后,它就不起作用。谁能告诉我如何解决这个问题?

附注这是我生成的一个非常简单的示例,以便您可以了解发生了什么;我真正的问题要复杂得多,并且在完成 MP 后我无法进行后期处理。

最佳答案

正如 @Ares 已经暗示的那样,您可以通过将 if __name__ == "__main__" 语句以南的所有内容缩进 if block 来解决问题。

仅供引用,这种情况发生在 Windows 上,它不提供像 Unix-y 系统那样启动新进程的 fork ,而是使用“spawn”作为默认(也是唯一)启动方法。 Spawn 意味着,操作系统必须为每个工作进程从头开始使用解释器启动一个新进程。

您的工作进程需要导入您的目标函数my_function。发生这种情况时,if __name__ == "__main__":- block 中未 protected 所有内容也将在导入时在每个子进程中运行。

关于python - Python中多重处理后的后处理结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53195581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com