我有一个对象列表,我想在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.Pool
和map
方法将myObj.go
方法应用于myList
中的每个元素。构造Pool
的processes
参数可以根据您想要使用的并行进程的数量进行更改,通常基于计算机上可用的内核数量。注意,为了在每次迭代中保持更新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)
你也可以阅读一下这个答案,了解一些更可能的方法。