首页 > 解决方案 > 用于创建对象的多处理 + 使用 starmap() Python 调用函数

问题描述

我想创建类对象Training并创建多个调用该print()函数的进程。

我有一堂课Training

class Training():

    def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2
    
    def print(self):
        print(self.param1)
        print(self.param2)

我尝试使用该starmap函数通过以下方式创建 5 个进程:

import multiprocessing as mp

num_devices = 5

func_args = []
for i in range (0, num_devices):
    func_args.append((i, i*10))

with mp.Pool(num_devices) as pool:
    obj = pool.starmap(Training, func_args, chunksize=1)
    obj[0].print()
    obj[1].print()
    obj[2].print()
    obj[3].print()
    obj[4].print()

但是,此代码正在创建多个进程来创建对象,而不是运行该print()函数。我怎样才能以正确的方式做到这一点?

标签: pythonobjectmultiprocessingpoolstarmap

解决方案


创建一个使用所需参数初始化的对象列表,以及一个调用对象方法的辅助函数:

def helper_func(obj):
    obj.print()

func_args = []
for i in range (0, num_devices):
    obj = Training(i, i*10)
    func_args.append(obj)

with mp.Pool(num_devices) as pool:
    pool.map(helper_func, func_args, chunksize=1)


推荐阅读