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

我对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跳过了数据生成部分,直接转到了分析部分。


那么,这项任务的正确逻辑是什么呢?我希望数据分析部分在数据生成部分之后被夸大。


繁花不似锦
浏览 102回答 1
1回答

月关宝盒

您可以使用期望元组的元组,这些元组是函数的参数。在这里,为了显示步骤,我提前生成了元组并将其存储在func_arg_tuple中。pool.starmap此外,无需在data_generation函数中保存结果的中间步骤。只需返回要处理的值,当池的工作完成时,它将在值中。resultsimport multiprocessingdef data_generation(param1, param2, param3):    # sample processing function - add your own    return np.random.normal(param3, param1, param2)param1 = 1param2 = 2with 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])]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python