Существует четыре варианта сопоставления заданий для обработки. Вы должны учитывать multi-args, параллелизм, блокировку и упорядочение. map
и map_asnyc
отличаются только блокировкой. map_async
неблокирующая где, как map
блокирует
Так позволяет сказать, что у вас есть функция
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'
пример вывода:
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))
будет ждать все 10 из этих вызовов функций, чтобы закончить поэтому мы видим, что все отпечатки в строке r = pool.map_async(f, range(10))
будут выполнять их асинхронно и только блокировать, когда вызывается r.wait()
, поэтому мы видим HERE
и MORE
между ними, но DONE
всегда будет в конце
Не отображает 'map' только после того, как карта выполнена (то есть синхронно, но параллельно), в то время как' map_async' возвращает сразу и позволяет отображать выполняется в фоновом режиме (т.е. асинхронно и параллельно)? –