реализация многопроцессорной с использованием joblib - PullRequest
0 голосов
/ 09 октября 2018

Я относительно новичок в python и пытаюсь распараллелить цикл for.Пример кода выглядит следующим образом:

def generate_session(t_max=10**5):
     <-----session generating code here---->
     return a, b, c

n_sessions = 100
from joblib import Parallel, delayed
sessions = Parallel(n_jobs=4, backend='threading')(delayed(generate_session) for _ in range(n_sessions))

generate_session () - это функция, создающая один полный успешный сеанс среды OpenAI gym MountainCar-v0.Мне удалось распараллелить приведенный выше код, используя многопроцессорный модуль и модули concurrent.futures без ошибок.

Реализация с использованием многопроцессорного модуля,

import multiprocessing as mp
n_sessions = 100
pool = mp.Pool(processes = 4)
sessions = [pool.apply(generate_session) for _ in range(n_sessions)]

С использованием модуля concurrent.futures,

import concurrent.futures
n_sessions = 100
with concurrent.futures.ThreadPoolExecutor(max_workers = 6) as executor:    
        sessions = [executor.submit(generate_session) for _ in range(n_sessions)]
sessions_result = [sessions[i].result() for i in range(len(sessions))]

Поскольку я не добился большого улучшения во времени, затраченном на обареализации, я изучал возможность использования других модулей, таких как модуль joblib.Когда я запускаю код для модуля joblib тем же способом, что и в других реализациях, я получаю сообщение об ошибке: «TypeError: объект« функция »не повторяется».Что мне здесь не хватает?

Функция generate_session () не нуждается в передаче аргументов, что затрудняет мне использование метода map, как во многих примерах, приведенных для joblib.

Какой из методов распараллеливания обеспечивает лучшую производительность в этом сценарии?

...