我想同时用不同的随机种子运行模拟。运行模拟的顺序代码是:
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(,结果按照您想要的格式进行格式化(一个列表元组(。