尝试使用pickle和多处理时出错



我试图使用多处理在Python 3.7中运行我的代码,但遇到了一个问题。当我尝试运行代码时出现错误:

Can't pickle local object 'mm_prepare_run.<locals>...

我知道这是泡菜的问题,但我没有找到一个正确的答案来解决这个问题。

我的简单代码如下。你能建议我怎样解决这个问题吗?

import multiprocessing
import copy
from pathlib import Path
proc_mrg = multiprocessing.Manager()
num_cpu = 8   # number of CPU

def prepare_run(config):
din['config'] = config
din_temp = copy.deepcopy(din)
dout_list.append(proc_mrg.dict({}))
#process = multiprocessing.Process(target=Run_IDEAS_instance_get_trajectory,args=(din_temp, dout_list[-1]))  
process = multiprocessing.Process(target=Run_IDEAS_instance_get_trajectory(din_temp, dout_list[-1]))
proc_list.append(process)
for job in proc_list:
job.start()

创建Process时,在prepare_run中,调用Run_IDEAS_instance_get_trajectory,而不是将其作为引用传递。并且由于该函数不返回结果,所以ProcesstargetNone

使用这个替代:

process = multiprocessing.Process(
target=Run_IDEAS_instance_get_trajectory,
args=(din_temp, dout_list[-1])
)

Python中的函数是可调用类型的第一类对象。参见";数据模型";Python语言参考中的第章。

编辑:

从你的评论中,我可以看到你正在ms windows上运行这段代码。在此平台上,需要if __name__ == "__main__"块内运行流程创建!由于multiprocessing在该平台上的工作方式,python必须能够导入脚本,而不会产生副作用,例如启动新进程。参见";编程指南";multiprocessing文档中的部分。

最新更新