Многопроцессорная обработка с добавлением в список для l oop - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть все oop как этот:

df = []
for i in range(50):
    if i <= 10:
        df.append(i)
    else:
        df.append(i+1000)

Я хотел бы запустить его с многопроцессорной обработкой, что-то вроде этого (это не работает):

df = []
items = range(50)
def try_my_operation(item):
    if i <= 10:
        df.append(i)
    else:
        df.append(i+1000)

executor = concurrent.futures.ProcessPoolExecutor(10)
futures = [executor.submit(try_my_operation, item) for item in items]
concurrent.futures.wait(futures)

Может кто-нибудь помочь мне, пожалуйста? Большое спасибо!

1 Ответ

0 голосов
/ 08 апреля 2020

Простой способ выполнения вашего кода с использованием нескольких процессов может состоять в использовании multiprocessing.Pool для создания sh пула работников (в соответствии с количеством ядер ЦП, доступных на вашем компьютере), затем map ваш items для функции, которую вы хотите вызвать:

import multiprocessing as mp                                                    

def try_my_operation(i):                                                        
    if i <= 10:                                                                 
        return i                                                                
    else:                                                                       
        return i + 1000                                                         

if __name__ == "__main__":                                                      
    items = range(50)                                                           
    with mp.Pool(processes=4) as pool:                                          
        df = pool.map(try_my_operation, items)                                  
    print(df)

Выход:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049]

Обратите внимание, что я изменил функцию для возврата значение, а не добавление в глобальный список, чтобы избежать сложности разделения состояния между параллельными процессами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...