Многопроцессный вызов метода списка объектов - PullRequest
0 голосов
/ 15 марта 2020

У меня есть список объектов, и я хочу вызывать метод этих объектов итеративно в течение для l oop, но чтобы ускорить процесс, мне нужно запустить его параллельно. Вот пример:

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()

Как я могу запустить второй l oop параллельно? поскольку эти объекты различны, это должно быть возможно.

1 Ответ

0 голосов
/ 17 марта 2020

Один из способов сделать это с помощью python 3.x - использовать метод multiprocessing.Pool и map, чтобы применить метод myObj.go к каждому элементу. в вашем myList. Параметр processes для построения Pool может быть изменен в зависимости от количества параллельных процессов, которые вы хотели бы использовать, обычно исходя из доступного количества ядер на вашем компьютере. Обратите внимание, что для того, чтобы сохранить результат обновления 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)                                 

Вы также можете прочитать этот ответ для более возможных подходов.

...