搬运工 发表于 2022-8-25 23:00:16

Python高性能编程(.pdf)



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 使用 cProfile 模块 .........................................................................................28
2.7 用 runsnakerun 对 cProfile 的输出进行可视化............................................33
2.8 用 line_profiler 进行逐行分析......................................................................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
异步社区会员 woshigedushuren(13120020972) 专享 尊重版权
2 目录
第 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
异步社区会员 woshigedushuren(13120020972) 专享 尊重版权
图目录 3
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 cffi ...................................................................................................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
异步社区会员 woshigedushuren(13120020972) 专享 尊重版权
4 目录
9.5 使用进程间通信来验证素数 ......................................................................221
9.5.1 串行解决方案 ...................................................................................225
9.5.2 Naïve Pool 解决方案 ........................................................................225
9.5.3 Less Naïve 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
异步社区会员 woshigedushuren(13120020972) 专享 尊重版权
图目录 5
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
异步社区会员 woshigedushuren(13120020972) 专享 尊重版权
6 目录
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


**** Hidden Message *****

hgzhou6 发表于 2022-8-26 04:18:56

啥也不说了,感谢楼主分享哇!

randy_1981 发表于 2022-8-26 05:48:29

正需要,支持楼主大人了!

李才哥 发表于 2022-8-26 08:19:14

啥也不说了,感谢楼主分享哇!

Max2020 发表于 2022-8-26 08:36:07

啥也不说了,感谢楼主分享哇!

smartfind 发表于 2022-8-26 09:32:35

啥也不说了,感谢楼主分享哇!

leoe 发表于 2022-8-26 12:02:11

啥也不说了,感谢楼主分享哇!

neun 发表于 2022-8-26 20:33:50

啥也不说了,感谢楼主分享哇!

Maple2d 发表于 2022-8-26 22:56:38

啥也不说了,感谢楼主分享哇!

hellojackd 发表于 2022-8-27 07:45:27

啥也不说了,感谢楼主分享哇!
页: [1] 2 3
查看完整版本: Python高性能编程(.pdf)