1. 程式人生 > >python multiprocessing.Pool 中map、map_async、apply、apply_async的區別

python multiprocessing.Pool 中map、map_async、apply、apply_async的區別

pen pool arm res 區別 col apply rgs pytho

  multiprocessing是python的多進程庫,multiprocessing.dummy則是多線程的版本,使用都一樣。

  其中都有pool池的概念,進程池/線程池有共同的方法,其中方法對比如下 :

There are four choices to mapping jobs to process. Here are the differences:

             Multi-args   Concurrence    Blocking     Ordered-results
map          no           yes            yes          yes
apply        yes          no             yes          no
map_async    no           yes            no           yes
apply_async  yes          yes            no           no

In Python 3, a new function starmap can accept multiple arguments.

Note that map and map_async are called for a list of jobs in one time, but apply and apply_async can only called for one job. However, apply_async execute a job in background therefore in parallel. See examples:

# map
results = pool.map(worker, [1, 2, 3])

# apply for x, y in [[1, 1], [2, 2]]: results.append(pool.apply(worker, (x, y))) def collect_result(result): results.append(result) # map_async pool.map_async(worker, jobs, callback=collect_result) # apply_async for x, y in [[1, 1], [2, 2]]: pool.apply_async(worker, (x, y), callback=collect_result)

原文地址: http://blog.shenwei.me/python-multiprocessing-pool-difference-between-map-apply-map_async-apply_async/

python multiprocessing.Pool 中map、map_async、apply、apply_async的區別