Python i pomoc w multitaskingu

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