我是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”方法。
在这种情况下,哪种并行化方法可提供最佳性能?