如何在Python类中并行设置实例属性



我想通过并行运行实例方法来设置实例属性。假设该属性最初是一个名为d的空字典,我想通过一个称为update_d的实例方法并行更新它。我目前正在使用multiprocessing.Pool:

from multiprocessing import Pool
import random

class A():
def __init__(self, n_jobs):
self.d = dict()
self.n_jobs = n_jobs
pool = Pool(self.n_jobs)
pool.map(self.update_d, range(100))
pool.close()
def update_d(self, key):
self.d[key] = random.randint(0, 100)

if __name__ == '__main__':
a = A(n_jobs=4)
print(a.d)

但是,在并行运行update_d之后,属性不会更新。我理解这是因为multiprocessing.Pool总是将实例关联到各个进程。但我想知道在Python中推荐的方法是什么请注意,我不想从update_d返回任何内容,我们可以假设代码是以单个进程不会相互冲突的方式编写的

编辑:我只是以字典为例。我需要一个允许属性为任何类型的变量的解决方案,例如Pandas数据帧。

您可能需要一个Manager来为您创建一个dict。我仍然不知道更新的效果如何,是否会有任何比赛条件。

from multiprocessing import Pool, Manager
import random

class A():
def __init__(self, n_jobs, manager):
self.d = manager.dict()
self.n_jobs = n_jobs
pool = Pool(self.n_jobs)
pool.map(self.update_d, range(100))
pool.close()
def update_d(self, key):
self.d[key] = random.randint(0, 100)

if __name__ == '__main__':
with Manager() as manager:
a = A(n_jobs=4, manager=manager)
print(a.d)

最新更新