Python高性能编程(第2版)
Micha Gorelick, Ian Ozsvald
张海龙 译
出版时间:2023年08月
页数:375
“本书将改变你的编程思维,这样的编程著作凤毛麟角。”
——Hilary Mason
Residence at Accel数据科学家

虽然现在编写的Python代码能够正确地运行,但我们希望其运行速度能够更快。本书基于Python 3编写,阐述了如何找出计算密集型程序的性能瓶颈,进而加快代码的执行速度。通过探索设计背后的基本理论,本书让读者对Python实现有了更深入的认识。
本书面向编程经验丰富的Python程序员。读者将学习如何充分利用多核体系结构或集群,如何让系统在不丧失可靠性的情况下扩缩容。通过本书,读者还可获悉众多问题的具体解决方案;了解众多公司在使用高性能Python进行社交媒体分析、产品化机器学习等过程中遇到的难事、趣事。
本书包括以下内容:
● 更牢固地掌握NumPy、Cython和剖析器;
● 了解Python如何抽象底层的计算机体系结构;
● 通过剖析找出CPU和内存消耗方面的瓶颈;
● 选择合适的数据结构来编写高效的程序;
● 提高矩阵和向量计算的速度;
● 使用工具将Python代码编译成机器代码;
● 同时管理多个I/O和计算操作;
● 对多进程代码进行转换,使其能够在本地或远程集群中运行;
● 使用Docker等工具更快地部署代码。
  1. 前言
  2. 第1章 理解高性能Python
  3. 1.1 基本的计算机系统
  4. 1.1.1 计算单元
  5. 1.1.2 存储单元
  6. 1.1.3 通信层
  7. 1.2 综合考虑
  8. 1.3 为何使用Python
  9. 1.4 如何成为高性能程序员
  10. 1.4.1 最佳实践
  11. 1.4.2 对Notebook最佳实践的思考
  12. 1.4.3 重新发现工作的乐趣
  13. 第 2章 通过剖析找出瓶颈
  14. 2.1 高效地剖析
  15. 2.2 朱利亚集合简介
  16. 2.3 计算整个朱利亚集合.
  17. 2.4 简单计时方法—print语句和装饰器
  18. 2.5 使用UNIX命令time的简单计时
  19. 2.6 使用模块cProfile
  20. 2.7 使用SnakeViz可视化cProfile的输出
  21. 2.8 使用line_profiler逐行剖析
  22. 2.9 使用memory_profiler诊断内存占用情况
  23. 2.10 使用PySpy查看既有进程
  24. 2.11 字节码:幕后发生的情况
  25. 2.11.1 使用模块dis查看CPython字节码
  26. 2.11.2 复杂度随方法而异
  27. 2.12 优化期间使用单元测试确保代码正确
  28. 2.13 确保代码剖析成功的策略
  29. 2.14 小结
  30. 第3章 列表和元组
  31. 3.1 更高效的查找方式
  32. 3.2 比较列表和元组
  33. 3.2.1 作为动态数组的列表
  34. 3.2.2 作为静态数组的元组
  35. 3.3 小结
  36. 第4章 字典和集合
  37. 4.1 字典和集合的工作原理
  38. 4.1.1 插入和检索
  39. 4.1.2 删除
  40. 4.1.3 调整长度
  41. 4.1.4 散列函数和熵
  42. 4.2 字典和名称空间
  43. 4.3 小结
  44. 第5章 迭代器和生成器
  45. 5.1 无穷数列迭代器
  46. 5.2 延迟执行生成器
  47. 5.3 小结
  48. 第6章 矩阵和向量计算
  49. 6.1 问题简介
  50. 6.2 Python列表不够好吗
  51. 6.3 内存碎片
  52. 6.3.1 理解perf
  53. 6.3.2 根据perf的输出做决策
  54. 6.3.3 进入numpy
  55. 6.4 使用numpy解决扩散问题
  56. 6.4.1 内存分配和就地操作
  57. 6.4.2 有选择地优化:找出需要修复的地方
  58. 6.5 numexpr:让你能够更快、更轻松地执行就地操作
  59. 6.6 警示故事:对优化进行验证(scipy)
  60. 6.7 从矩阵优化获得的经验教训
  61. 6.8 Pandas
  62. 6.8.1 Pandas的内部模型
  63. 6.8.2 将函数应用于多行数据
  64. 6.8.3 根据部分结果而不是使用拼接来创建DataFrame和Series
  65. 6.8.4 有多种解决问题的方式(而且可能有更快的方式)
  66. 6.8.5 Pandas高效开发建议
  67. 6.9 小结
  68. 第7章 编译成C代码
  69. 7.1 速度提升方法
  70. 7.2 JIT编译器和AOT编译器
  71. 7.3 为何类型信息有助于提高代码运行速度
  72. 7.4 使用C语言编译器
  73. 7.5 回顾朱利亚集合示例
  74. 7.6 Cython
  75. 7.7 pyximport
  76. 7.7.1 使用Cython标注选项来分析代码块
  77. 7.7.2 添加类型标注
  78. 7.8 Cython和numpy
  79. 7.9 Numba
  80. 7.10 PyPy
  81. 7.10.1 垃圾收集方面的差异
  82. 7.10.2 运行PyPy及安装模块
  83. 7.11 速度提升小结
  84. 7.12 各种技术的适用场景
  85. 7.13 图形处理单元
  86. 7.13.1 动态图:PyTorch
  87. 7.13.2 GPU基本剖析
  88. 7.13.3 GPU性能考虑因素
  89. 7.13.4 在什么情况下使用GPU
  90. 7.14 语言交互接口
  91. 7.14.1 ctypes
  92. 7.14.2 cffi
  93. 7.14.3 f2py
  94. 7.14.4 CPython模块
  95. 7.15 小结
  96. 第8章 异步I/O
  97. 8.1 异步编程简介
  98. 8.2 async/await的工作原理
  99. 8.2.1 串行爬虫
  100. 8.2.2 gevent
  101. 8.2.3 tornado
  102. 8.2.4 aiohttp
  103. 8.3 兼具CPU密集型和I/O密集型的问题
  104. 8.3.1 串行版
  105. 8.3.2 分批处理结果
  106. 8.3.3 完全异步
  107. 8.4 小结
  108. 第9章 模块multiprocessing
  109. 9.1 模块multiprocessing概述
  110. 9.2 使用蒙特卡罗方法估算圆周率
  111. 9.3 使用进程和线程估算圆周率
  112. 9.3.1 使用Python对象
  113. 9.3.2 使用Joblib而不是multiprocessing
  114. 9.3.3 并行系统中的随机数
  115. 9.3.4 使用numpy
  116. 9.4 查找素数
  117. 9.5 使用进程间通信验证素数
  118. 9.5.1 串行解决方案
  119. 9.5.2 朴素进程池解决方案
  120. 9.5.3 改进的朴素进程池解决方案
  121. 9.5.4 将Manager.Value用作标志
  122. 9.5.5 将Redis用作标志
  123. 9.5.6 将RawValue用作标志
  124. 9.5.7 将mmap用作标志
  125. 9.5.8 将mmap用作标志(终极版)
  126. 9.6 使用multiprocessing共享numpy数据
  127. 9.7 同步文件和变量访问
  128. 9.7.1 锁定文件
  129. 9.7.2 锁定值
  130. 9.8 小结
  131. 第10章 集群和作业队列
  132. 10.1 集群的优点
  133. 10.2 集群的缺点
  134. 10.2.1 糟糕的集群升级策略让华尔街大牛损失4.62亿美元
  135. 10.2.2 Skype全球24小时中断服务
  136. 10.3 常见的集群设计
  137. 10.4 如何启动集群解决方案
  138. 10.5 使用集群时如何避免麻烦
  139. 10.6 两种集群解决方案
  140. 10.6.1 使用IPython Parallel为研究工作提供支持
  141. 10.6.2 使用Dask并行化Pandas
  142. 10.7 使用NSQ打造健壮的生产集群
  143. 10.7.1 队列
  144. 10.7.2 发布者/订阅者
  145. 10.7.3 分布式素数计算
  146. 10.8 其他集群工具
  147. 10.9 Docker
  148. 10.9.1 Docker的性能
  149. 10.9.2 Docker的优点
  150. 10.10 小结
  151. 第 11章 减少内存占用量
  152. 11.1 基本类型对象的开销很高
  153. 11.1.1 模块array可高效地存储大量的基本类型对象
  154. 11.1.2 使用NumExpr减少NumPy占用的内存量
  155. 11.2 理解集合占用的内存
  156. 11.3 比较字节和Unicode
  157. 11.4 在内存中高效地存储大量文本
  158. 11.5 使用scikit-learn FeatureHasher进行文本建模
  159. 11.6 DictVectorizer和FeatureHasher简介
  160. 11.7 SciPy稀疏矩阵
  161. 11.8 减少内存占用量的技巧
  162. 11.9 概率数据结构
  163. 11.9.1 使用1字节的莫里斯计数器实现非常接近的计数
  164. 11.9.2 K最小值
  165. 11.9.3 布隆过滤器
  166. 11.9.4 LogLog计数器
  167. 11.9.5 实例
  168. 第 12章 实战经验教训
  169. 12.1 使用特征引擎简化特征工程流水线
  170. 12.1.1 机器学习中的特征工程
  171. 12.1.2 艰巨的特征工程流水线部署任务
  172. 12.1.3 利用开源Python库
  173. 12.1.4 使用Feature-engine简化特征工程流水线的构建和部署工作
  174. 12.1.5 推广新的开源包
  175. 12.1.6 开发和维护开源库及鼓励积极投稿
  176. 12.2 表现出色的数据科学团队
  177. 12.2.1 需要多长时间
  178. 12.2.2 探索和规划
  179. 12.2.3 管理预期和交付
  180. 12.3 Numba
  181. 12.3.1 一个简单的示例
  182. 12.3.2 最佳实践和建议
  183. 12.3.3 寻求帮助
  184. 12.4 优化和思维
  185. 12.5 Adaptive Lab的社交媒体分析(2014)
  186. 12.5.1 Adaptive Lab的Python使用情况
  187. 12.5.2 SoMA的设计
  188. 12.5.3 开发方法
  189. 12.5.4 维护SoMA
  190. 12.5.5 给同行的建议
  191. 12.6 RadimRehurek网站如何让深度学习快步如飞(2014)
  192. 12.6.1 管用的策略
  193. 12.6.2 优化方面的经验教训
  194. 12.6.3 结语
  195. 12.7 Lyst网站可用于生产环境的大规模机器学习(2014)
  196. 12.7.1 集群设计
  197. 12.7.2 发展迅猛的初创公司中的代码迭代
  198. 12.7.3 构建推荐引擎
  199. 12.7.4 报告和监控
  200. 12.7.5 一些建议
  201. 12.8 Smesh的大规模社交媒体分析(2014)
  202. 12.8.1 Python在Smesh中扮演的角色
  203. 12.8.2 平台
  204. 12.8.3 实时高性能字符串匹配
  205. 12.8.4 报告、监控、调试和部署
  206. 12.9 使用PyPy成功地实现Web和数据处理系统(2014)
  207. 12.9.1 使用的工具
  208. 12.9.2 数据库
  209. 12.9.3 Web应用
  210. 12.9.4 OCR和翻译
  211. 12.9.5 任务分配和任务队列
  212. 12.9.6 结语
  213. 12.10 Lanyrd的任务队列(2014)
  214. 12.10.1 Python在Lanyrd扮演的角色
  215. 12.10.2 让任务队列表现出色
  216. 12.10.3 报告、监控、调试和部署
  217. 12.10.4 给同行的建议
书名:Python高性能编程(第2版)
译者:张海龙 译
国内出版社:人民邮电出版社
出版时间:2023年08月
页数:375
书号:978-7-115-59947-6
原版书书名:High Performance Python, 2nd Edition
原版书出版商:O'Reilly Media
Micha Gorelick
 
米夏·戈雷利克(Micha Gorelick),Fast Forward Labs联合创始人,致力于探讨与机器学习研究和利用相关的伦理及现实问题。
 
 
Ian Ozsvald
 
伊恩·欧日沃尔德(Ian Ozsvald),首席数据科学家兼团队指导;PyData伦敦年会的组织者之一;负责运营位于伦敦的咨询公司Mor Consulting Data Science;经常在国际会议上发表演讲。
 
 
购买选项
定价:119.80元
书号:978-7-115-59947-6
出版社:人民邮电出版社