Так что я просто хотел попробовать распараллеливание, чтобы ускорить мой сценарий, но все, что я нахожу в нем, на самом деле мне не помогает.
У меня работает алгоритм оптимизации, и в каждой итерации требуется несколько оценок различных параметров. Каждая из этих оценок представляет собой симуляцию, которая занимает около 10 минут.
while(True):
f_xn = runSim(xn[0],xn[1],25,na)
f_xb = runSim(xb[0],xb[1],25,na)
if f_xn < e:
break
Так есть ли способ заставить эти два вызова функций выполняться одновременно, а затем позволить процессу продолжить со значениями f_xn
и f_xb
, как только они оба будут завершены?
Определение runSim (). Некоторые строки здесь отсутствуют, но они просто меняют некоторые значения в текстовом файле.
def runSim(n):
if 'SUMO_HOME' in os.environ:
tools = os.path.join(os.environ['SUMO_HOME'], 'tools')
sys.path.append(tools)
else:
sys.exit("please declare environment variable 'SUMO_HOME'")
sumoBinary = "C:\Program Files (x86)/DLR/Sumo/bin/sumo-gui.exe"
sumoCmd = [sumoBinary, "-c", "sim/sumo_config.sumo.cfg"]
speed_error = []
ntg_error = []
for i in range(0,n):
print(i)
sumoBinary = "C:\Program Files (x86)/DLR/Sumo/bin/sumo.exe"
sumoCmd = [sumoBinary, "-c", "sim/sumo_config.sumo.cfg"]
traci.start(sumoCmd)
while traci.simulation.getMinExpectedNumber() > 0:
traci.simulationStep()
setVehType()
traci.close()
speed, ntg = Auswertung.auswerten()
speed_error.append(speed)
ntg_error.append(ntg)
speed_mean_error = sum(speed_error)/len(speed_error)
ntg_mean_error = sum(ntg_error)/len(ntg_error)
return speed_mean_error, ntg_mean_error