多进程调用对象列表的方法



我有一个对象列表,我想在for循环中迭代调用这些对象的方法,但为了加快速度,我需要并行运行。这里有一个例子:

class myObj:
def __init__(self):
self.x = 0
def go(self):
self.x += 1
myList = [myObj() for i in range(100)]
for t in range(1000):
for obj_ in myList:
obj_.go()

如何并行运行第二个循环?因为这些对象是不同的,所以应该是可能的。

使用python 3.x执行此操作的一种方法是使用multiprocessing.Poolmap方法将myObj.go方法应用于myList中的每个元素。构造Poolprocesses参数可以根据您想要使用的并行进程的数量进行更改,通常基于计算机上可用的内核数量。注意,为了在每次迭代中保持更新myObj.x的结果,我修改了go方法以返回self:

import multiprocessing as mp                                                    
class myObj:                                                                    
def __init__(self):                                                         
self.x = 0                                                              
def go(self):                                                               
self.x += 1                                                             
return self                                                             
if __name__ == "__main__":                                                      
myList = [myObj() for i in range(100)]                                      
with mp.Pool(processes=4) as pool:                                          
for t in range(1000):                                                   
myList = pool.map(myObj.go, myList)                                 

你也可以阅读一下这个答案,了解一些更可能的方法。

相关内容

  • 没有找到相关文章

最新更新