Dostępne są cztery opcje mapowania zadań do przetworzenia. Musisz wziąć pod uwagę multi-args, współbieżność, blokowanie i porządkowanie. map
i map_asnyc
różnią się tylko pod względem blokowania. map_async
nie jest blokowanie gdzie jako map
blokuje
Więc powiedzmy, że miał funkcję
from multiprocessing import Pool
import time
def f(x):
print x*x
if __name__ == '__main__':
pool = Pool(processes=4)
pool.map(f, range(10))
r = pool.map_async(f, range(10))
# DO STUFF
print 'HERE'
print 'MORE'
r.wait()
print 'DONE'
przykład wyjście:
0
1
9
4
16
25
36
49
64
81
0
HERE
1
4
MORE
16
25
36
9
49
64
81
DONE
pool.map(f, range(10))
będzie czekać na wszystkich 10 z tych funkcji rozmowy, aby zakończyć więc widzimy wszystkie wydruki z rzędu r = pool.map_async(f, range(10))
wykonamy je asynchronicznie i tylko zablokujemy, gdy zostanie wywołana r.wait()
, więc widzimy HERE
i MORE
pomiędzy, ale DONE
zawsze będą na końcu
Nie odwzorowuje 'map' tylko po wykonaniu mapy (tj. Synchronicznie, ale równolegle), podczas gdy' map_async' zwraca się od razu i pozwala na mapowanie wykonane w tle (tj. asynchronicznie i równolegle)? –