为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中完成多处理部分后运行代码

如何在python中完成多处理部分后运行代码

繁花不似锦 2022-09-27 16:20:29
我对python的多处理非常陌生。目前,我正在尝试使用多处理进行数据生成(10次),然后做一些后续工作。我当前的代码是这样的:def data_generation(param1, param2, param3):    main function    np.save(....)for i in np.arrange(10):   if __name__ == '__main__':   ratio = np.arange(0.3, 1.4, 0.1)   pool = Pool(os.cpu_count())   param1 = 1   param2 = 2   func = partial(data_generation, param1, param2)   _ = pool.map(func, param3=ratio)   pool.close()   pool.join()   ### then I would like to read the generated data and do analysis   result = np.load(..)我的想法是,我想做一件作品10次。每次,我都会生成数据,进行分析,存储结果,然后再次执行。对于数据生成部分,需要将一个参数从 0.3 更改为 1.4。这就是我想要使用多处理的地方。问题是每次当我运行代码时,看起来python跳过了数据生成部分,直接转到了分析部分。那么,这项任务的正确逻辑是什么呢?我希望数据分析部分在数据生成部分之后被夸大。
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您可以使用期望元组的元组,这些元组是函数的参数。在这里,为了显示步骤,我提前生成了元组并将其存储在func_arg_tuple中。pool.starmap


此外,无需在data_generation函数中保存结果的中间步骤。只需返回要处理的值,当池的工作完成时,它将在值中。results


import multiprocessing


def data_generation(param1, param2, param3):

    # sample processing function - add your own

    return np.random.normal(param3, param1, param2)


param1 = 1

param2 = 2


with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:

    func_arg_tuple = tuple((param1, param2, ratio) for ratio in np.arange(0.3, 1.4, 0.1))

    results = pool.starmap(data_generation, func_arg_tuple)


>>>results

[array([-0.89459092,  2.03727378]),

 array([-0.79459092,  2.13727378]),

 array([-0.69459092,  2.23727378]),

 array([0.57145244, 0.75501116]),

 array([ 2.40776746, -0.17882601]),

 array([0.77145244, 0.95501116]),

 array([-0.88291467,  1.3072801 ]),

 array([0.97145244, 1.15501116]),

 array([0.0123457 , 2.25667152]),

 array([2.90776746, 0.32117399]),

 array([3.00776746, 0.42117399])]


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信