在模拟中对具有多个返回的函数使用多处理



我想同时用不同的随机种子运行模拟。运行模拟的顺序代码是:

def run_multiple_simulations(n=10,T=T,p=p):
A,B,C,D,E=[],[],[],[],[]
for i in range(n):
a,b,c,d,e= do_simulation(T,p=p,seed=i)
A.append([a])
B.append([b])
C.append([c])
D.append([d])
E.append([e])
return A,B,C,D,E

是否有一种方法可以获得run_multiple_simulations()的返回语句中的结果(a、b、c、d和e是数组(。

您可以使用ThreadPoolExecutor:

from concurrent.futures import ThreadPoolExecutor
def do_simulation(t, p, seed):  # (1)
return (1, 2, 3, 4, 5)
def run_multiple_simulations(n, t, p):
def _do_simulation(seed):  # (2)
return do_simulation(t, p, seed)
with ThreadPoolExecutor() as e:
results = e.map(_do_simulation, range(n))  # (3)
return tuple(zip(*results))  # (4)
print(run_multiple_simulations(3, 0, 0))

我在(1(中定义了您函数的模拟版本。函数(2(是(1(的当前版本,只有种子参数,因为它是唯一在执行之间发生变化的参数。然后,使用ThreadPoolExecutor来并行地进行工作(3(。最后(4(,结果按照您想要的格式进行格式化(一个列表元组(。

相关内容

  • 没有找到相关文章