使用joblib实现多处理

时间:2018-10-09 08:45:01

标签: python multithreading multiprocessing reinforcement-learning

我是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健身房MountainCar-v0环境成功的会话。我能够使用multiprocessing模块和parallel.futures模块并行执行上述代码,而没有错误。

使用多处理模块的实现

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

使用current.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:'function'对象不可迭代”。我在这里想念什么?

函数generate_session()不需要传递任何参数,这使我很难像显示joblib的许多示例那样使用“ map”方法。

在这种情况下,哪种并行化方法可提供最佳性能?

0 个答案:

没有答案