您的位置:首页 > 编程语言 > Python开发

python multiprocessing.Pool 中map、map_async、apply、apply_async的区别

2017-10-10 14:13 369 查看

  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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: