starmap jest blokujące, więc program powinien poczekać dopóki wszystkie zadania się nie wykonają.
Niestety chyba nie działa to tak jak powinno.
start = time.time()
if __name__ == '__main__':
freeze_support()
with Pool() as p:
p.starmap(laminarFlameSpeed,input)
end=time.time()
print(end-start)
w odpowiedzi dostaję:
0.0
0.0
0.0
0.0
Mixture-averaged flamespeed at phi = 1.0 is 0.606019 m/s
Mixture-averaged flamespeed at phi = 1.0 is 0.375955 m/s
28.481059074401855
Mój pool wynosi zapewne 4 (cztery rdzenie). I stąd pierwsze cztery razy policzony jest czas obliczeń wynoszący 0 sekund.
No przy takim kodzie sprawa jest bardziej skomplikowana.
Tak, jest to związane z ilością procesów. Każdy proces wczytuje Twój kod oddzielnie, dlatego czas pojawił się 4 razy.
Cały kod odpalasz w funkcji main, ale mierzenie czasu masz zrobione poza funkcją w przestrzeni globalnej. Tak na prawdę mierzysz czas w jakim interpreter pythona załadował definicję funkcji main, a nie czas jej wykonania.
Na szczęście chyba nie:
if __name__ == '__main__':
start = time.time()
freeze_support()
with Pool() as p:
p.starmap(laminarFlameSpeed,input)
end=time.time()
print(end-start)
w wyniku dostaję już tylko:
Mixture-averaged flamespeed at phi = 1.0 is 0.606019 m/s
Mixture-averaged flamespeed at phi = 1.0 is 0.375955 m/s
25.332786321640015
Także ten temat został rozwiązany. Być będę musiał jeszcze zasięgnąć waszej pomocy w niedalekiej przyszłości - na razie mam tylko bazę programu, muszę napisać jeszcze cały kod optymalizujący.
Tymczasem dziękuję Ci bardzo za Twój czas, opłaciło się!
Pozdrawiam serdecznie,
Oskar