原创博客地址: python进阶08并发之四map, apply, map_async, apply_async差异

差异矩阵

python封装了4种常用方法,用于实现并发
其差异如下

  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

需要注意:map 和 map_async 入参为迭代器类型,可以批量调用。而apply和apply_async只能一个个调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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)

apply和apply_async

Pool.apply_async:调用立即返回而不是等待结果。AsyncResult返回一个对象。你调用其get()方法以检索函数调用的结果。该get()方法将阻塞直到功能完成。
因此,pool.apply(func, args, kwargs)等效于pool.apply_async(func, args, kwargs).get()。
相比Pool.apply,该Pool.apply_async方法还具有一个回调,则在函数完成时调用该回调。可以使用它来代替get()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import multiprocessing as mp
import timedef foo_pool(x):time.sleep(2)return x*xresult_list = []
def log_result(result):# This is called whenever foo_pool(i) returns a result.# result_list is modified only by the main process, not the pool workers.result_list.append(result)def apply_async_with_callback():pool = mp.Pool()for i in range(10):pool.apply_async(foo_pool, args = (i, ), callback = log_result)pool.close()pool.join()print(result_list)if __name__ == '__main__':apply_async_with_callback()
可能会产生如下结果[1, 0, 4, 9, 25, 16, 49, 36, 81, 64]

还要注意,可使用调用许多不同的函数Pool.apply_async(并非所有调用都需要使用同一函数)。
相反,Pool.map将相同的函数应用于许多参数。但是,与不同Pool.apply_async,返回结果的顺序与参数的顺序相对应。

参考

Python multiprocessing.Pool: Difference between map, apply, map_async, apply_async
Python-multiprocessing.Pool:何时使用apply,apply_async或map?

python进阶08并发之四map, apply, map_async, apply_async差异相关推荐

  1. python进阶11并发之七多种并发方式的效率测试

    原创博客地址:python进阶11并发之七多种并发方式的效率测试 测试map,apply_async,gevent协程爬虫 测试代码:网页爬虫 函数代码 1 2 3 4 5 6 7 8 9 10 11 ...

  2. python进阶10并发之六并行化改造

    原创博客地址:python进阶10并发之六并行化改造 图示变量含义说明: 1个大step中包含3个小step,大step内部的第一步,二步,三步存在依赖关系(就是内部保持顺序执行) a1,b1,c1, ...

  3. python进阶07并发之三其他问题

    原创博客地址:python进阶07并发之三其他问题 何时使用多进程(线程) 使用多进程or线程,对于python,考虑到GIL锁,基本上默认使用多进程就对了. 除此之外,线程共享全局变量,进程全局变量 ...

  4. python进阶12并发之八多线程与数据同步

    原创博客地址:python进阶12并发之八多线程与数据同步 python并发首选进程,但偶尔有场景进程无法搞定,比如有些变量是无法序列化的,就无法使用工具包manager()的工具类进行共享.如果自己 ...

  5. python进阶09并发之五生产者消费者

    原创博客地址:python进阶09并发之五生产者消费者 这也是实际项目中使用较多的一种并发模式,用Queue(JoinableQueue)实现,是Python中最常用的方式(这里的queue特指mul ...

  6. python进阶05并发之一基本概念

    原创博客地址:python进阶05并发之一基本概念 大多编程语言,一旦涉及并发,都会比较复杂,知识点也较多(大多为历史问题,很多技术点现在非常少使用了,但语言层面也提供支持,对于这些冷门点,只需要知道 ...

  7. python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器

    函数式编程 一.闭包 python一切皆对象 一切皆对象意味着,所有类型均可被赋值,传参~:函数可以当做参数传递,也可以被当做返回值返回:在其他一些语言中函数仅是一段代码块. 闭包的定义与用法 如何验 ...

  8. Python 进阶之路 (五) map, filter, reduce, zip 一网打尽

    简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip. 它们都是处理序列的便捷函数.这很大程度上归功于函数式编程的 ...

  9. Python进阶08 异常处理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 本文特别感谢kylinfish的纠正,相关讨论见留言区. 异常处理 在项目开发中, ...

最新文章

  1. ssms 缺少索引信息_MySQL3:索引
  2. 《Starting with Starling》 Ep 1~11
  3. js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了
  4. IAR常用快捷键及技巧
  5. datagrid combobox 选择后显示valueField 而不是 textValue解决方法
  6. 弦图(Echarts)
  7. 这本书非常值得一读!《微习惯》读后感
  8. 【SEU程序设计课笔记】 Mooc - Chapter 6 - (EX) - 泰勒展开求sin(x)/计算PI的近似值
  9. pycharm安装redis
  10. linux下hg命令
  11. PS: Deep Neural Networks Are Easily Fooled___CVPR2015
  12. XP电脑桌面图标文字带上颜色不透明 解决办法
  13. Java启动参数(-, -X, -XX参数)详解
  14. 计算机主板会自动切断电源是怎么回事,告诉你电脑自动断电怎么办
  15. 面试系列 -- 常见面试问题回答思路
  16. OpenCV笔记之六(1)——图像处理之图像变换
  17. 【面试经历】美团2020秋招测试开发一面二面
  18. 页面展示结果不符合预期
  19. java 工具类命名_16种java工具类
  20. ..\USER\stm32f10x.h(428): error: #67: expected a “}“ ADC1_2_IRQn = 18, /*!<

热门文章

  1. MyBatis使用in进行列表中数据的批量删除
  2. Interllij IDEA启动Jrebe因为中文路径失败
  3. ssis中数据类型_SSIS中的数据挖掘查询
  4. ssas如何创建分区_如何基于SSAS信息创建Excel报告
  5. SQL Server实例的十大安全注意事项
  6. SQL Server整合–在单个SQL Server实例上托管多个数据库
  7. 【进阶】【转】项目经理常用工具
  8. MYSQL——表操作
  9. activiti学习笔记---常见异常
  10. Machine Learning In Action 第二章学习笔记: kNN算法