《Python高性能编程》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)戈雷利克(Micha Gorelick),欧日沃尔德(Ian Ozsvald)
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2017
  • ISBN:9787115454898
  • 页数:334 页
图书介绍:本书针对有一定基础的Python程序员,将指导读者实现代码优化的各种方法。读者将学习如何使用智能的算法,以及使用各种相关的技术,例如numpy、cython、cpython等,以及各种多线程和多节点策略。市面上一致缺乏学习用Pyhton完成高度计算性任务的教程,而本书正是这方面不可多得的一本好书。

第1章 理解高性能Python 1

1.1基本的计算机系统 1

1.1.1计算单元 2

1.1.2存储单元 5

1.1.3通信层 6

1.2将基本的元素组装到一起 8

1.3为什么使用Python 12

第2章 通过性能分析找到瓶颈 15

2.1高效地分析性能 16

2.2 Julia集合的介绍 17

2.3计算完整的Julia集合 20

2.4计时的简单方法——打印和修饰 24

2.5用UNIX的time命令进行简单的计时 27

2.6使用cProfiile模块 28

2.7用runsnakerun对cProfiile的输出进行可视化 33

2.8用line_profiiler进行逐行分析 34

2.9用memory_profiler诊断内存的用量 39

2.10用heapy调查堆上的对象 45

2.11用dowser实时画出变量的实例 47

2.12用dis模块检查CPython字节码 49

2.13在优化期间进行单元测试保持代码的正确性 53

2.14确保性能分析成功的策略 56

2.15 小结 57

第3章 列表和元组 58

3.1一个更有效的搜索 61

3.2列表和元组 63

3.2.1动态数组:列表 64

3.2.2静态数组:元组 67

3.3小结 68

第4章 字典和集合 69

4.1字典和集合如何工作 72

4.1.1插入和获取 73

4.1.2删除 76

4.1.3改变大小 76

4.1.4散列函数和熵 76

4.2字典和命名空间 80

4.3小结 83

第5章 迭代器和生成器 84

5.1无穷数列的迭代器 87

5.2生成器的延迟估值 89

5.3小结 93

第6章 矩阵和矢量计算 94

6.1问题介绍 95

6.2 Python列表还不够吗 99

6.3内存碎片 103

6.3.1理解perf 105

6.3.2根据perf输出做出抉择 106

6.3.3使用numpy 107

6.4用numpy解决扩散问题 110

6.4.1内存分配和就地操作 113

6.4.2选择优化点:找到需要被修正的地方 116

6.5 numexpr:让就地操作更快更简单 120

6.6告诫故事:验证你的“优化”(scipy) 121

6.7小结 123

第7章 编译成C 126

7.1可能获得哪种类型的速度提升 127

7.2 JIT和AOT编译器的对比 129

7.3为什么类型检查有助代码更快运行 129

7.4使用C编译器 130

7.5复习Julia集的例子 131

7.6 Cython 131

7.6.1使用Cython编译纯Python版本 132

7.6.2 Cython注解来分析代码块 134

7.6.3增加一些类型注解 136

7.7 Shed Skin 140

7.7.1构建扩展模块 141

7.7.2内存拷贝的开销 144

7.8 Cython和numpy 144

7.9 Numba 148

7.10 Pythran 149

7.11 PyPy 151

7.11.1垃圾收集的差异 152

7.11.2运行PyPy并安装模块 152

7.12什么时候使用每种工具 154

7.12.1其他即将出现的项目 155

7.12.2一个图像处理单元(GPU)的注意点 156

7.12.3一个对未来编译器项目的展望 157

7.13外部函数接口 157

7.13.1 ctypes 158

7.13.2 cffii 160

7.13.3 f2py 163

7.13.4 CPython模块 166

7.14小结 170

第8章 并发 171

8.1异步编程介绍 172

8.2串行爬虫 175

8.3 gevent 177

8.4 tornado 182

8.5 AsyncIO 185

8.6数据库的例子 188

8.7小结 191

第9章multiprocessing模块 193

9.1 multiprocessing模块综述 196

9.2使用蒙特卡罗方法来估算pi 198

9.3使用多进程和多线程来估算pi 199

9.3.1使用Python对象 200

9.3.2并行系统中的随机数 207

9.3.3使用numpy 207

9.4寻找素数 210

9.5使用进程间通信来验证素数 221

9.5.1串行解决方案 225

9.5.2 Naive Pool解决方案 225

9.5.3 Less Naive Pool解决方案 226

9.5.4使用Manager.Value作为一个标记 227

9.5.5使用Redis作为一个标记 229

9.5.6使用RawValue作为一个标记 232

9.5.7使用mmap作为一个标记 232

9.5.8使用mmap作为一个标记的终极效果 234

9.6用multiprocessing来共享numpy数据 236

9.7同步文件和变量访问 243

9.7.1文件锁 243

9.7.2给Value加锁 247

9.8小结 249

第10章 集群和工作队列 251

10.1集群的益处 252

10.2集群的缺陷 253

10.2.1糟糕的集群升级策略造成华尔街损失4.62亿美元 254

10.2.2 Skype的24小时全球中断 255

10.3通用的集群设计 255

10.4怎样启动一个集群化的解决方案 256

10.5使用集群时避免痛苦的方法 257

10.6三个集群化解决方案 258

10.6.1为简单的本地集群使用Parallel Python模块 259

10.6.2使用IPython Parallel来支持研究 260

10.7为鲁棒生产集群的NSQ 265

10.7.1队列 265

10.7.2发布者/订阅者 266

10.7.3分布式素数计算器 268

10.8看一下其他的集群化工具 271

10.9小结 272

第11章 使用更少的RAM 273

11.1基础类型的对象开销高 274

11.2理解集合中的RAM使用 278

11.3字节和Unicode的对比 280

11.4高效地在RAM中存储许多文本 281

11.5使用更少RAM的窍门 290

11.6概率数据结构 291

11.6.1使用1字节的Morris计数器来做近似计数 292

11.6.2 K最小值 295

11.6.3布隆过滤器 298

11.6.4 LogLog计数器 303

11.6.5真实世界的例子 307

第12章 现场教训 311

12.1自适应实验室(Adaptive Lab)的社交媒体分析(SoMA) 311

12.1.1自适应实验室(Adaptive Lab)使用的Python 312

12.1.2 SoMA的设计 312

12.1.3我们的开发方法论 313

12.1.4维护SoMA 313

12.1.5对工程师同行的建议 313

12.2使用RadimRehurek.com让深度学习飞翔 314

12.2.1最佳时机 314

12.2.2优化方面的教训 316

12.2.3总结 318

12.3在Lyst.com的大规模产品化的机器学习 318

12.3.1 Python在Lyst的地位 319

12.3.2集群设计 319

12.3.3在快速前进的初创公司中做代码评估 319

12.3.4构建推荐引擎 319

12.3.5报告和监控 320

12.3.6一些建议 320

12.4在Smesh的大规模社交媒体分析 321

12.4.1 Python在Smesh中的角色 321

12.4.2平台 321

12.4.3高性能的实时字符串匹配 322

12.4.4报告、监控、调试和部署 323

12.5 PyPy促成了成功的Web和数据处理系统 324

12.5.1先决条件 325

12.5.2数据库 325

12.5.3 Web应用 326

12.5.4 OCR和翻译 326

12.5.5任务分发和工作者 327

12.5.6结论 327

12.6在Lanyrd.com中的任务队列 327

12.6.1 Python在Lanyrd中的角色 328

12.6.2使任务队列变高性能 328

12.6.3报告、监控、调试和部署 328

12.6.4对开发者同行的建议 329