码的正确性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.2Python列表还不够吗99
6.3内存碎片103
6.3.1理解perf105
6.3.2根据perf输出做出抉择106
6.3.3使用numpy107
6.4用numpy解决扩散问题110
6.4.1内存分配和就地操作113
6.4.2选择优化点:找到需要被修正的地方116
6.5numexpr:让就地操作更快更简单120
6.6告诫故事:验证你的“优化”(scipy)121
6.7小结123
第7章编译成C126
7.1可能获得哪种类型的速度提升127
7.2JIT和AOT编译器的对比129
7.3为什么类型检查有助代码更快运行129
7.4使用C编译器130
7.5复习Julia集的例子131
7.6Cython131
7.6.1使用Cython编译纯Python版本132
7.6.2Cython注解来分析代码块134
7.6.3增加一些类型注解136
7.7ShedSkin140
7.7.1构建扩展模块141
7.7.2内存拷贝的开销144
7.8Cython和numpy144
7.9Numba148
7.10Pythran149
7.11PyPy151
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.1ctypes158
7.13.2cffi160
7.13.3f2py163
7.13.4CPython模块166
7.14小结170
第8章并发171
8.1异步编程介绍172
8.2串行爬虫175
8.3gevent177
8.4tornado182
8.5AsyncIO185
8.6数据库的例子188
8.7小结191
第9章multiprocessing模块193
9.1multiprocessing模块综述196
9.2使用蒙特卡罗方法来估算Pi198
9.3使用多进程和多线程来估算Pi199
9.3.1使用Python对象200
9.3.2并行系统中的随机数207
9.3.3使用numpy207
9.4寻找素数210
9.5使用进程间通信来验证素数221
9.5.1串行解决方案225
9.5.2NaïvePool解决方案225
9.5.3LessNaïvePool解决方案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.2Skype的24小时全球中断255
10.3通用的集群设计255
10.4怎样启动一个集群化的解决方案256
10.5使用集群时避免痛苦的方法257
10.6三个集群化解决方案258
10.6.1为简单的本地集群使用ParallelPython模块259
10.6.2使用IPythonParallel来支持研究260
10.7为鲁棒生产集群的NSQ265
10.7.1队列265
10.7.2发布者/订阅者266
10.7.3分布式素数计算器268
10.8看一下其他的集群化工具271
10.9小结272
第11章使用更少的RAM273
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.2K最小值295
11.6.3布隆过滤器298
11.6.4LogLog计数器303
11.6.5真实世界的例子307
第12章现场教训311
12.1自适应实验室(AdaptiveLab)的社交媒体分析(SoMA)311
12.1.1自适应实验室(AdaptiveLab)使用的Python312
12.1.2SoMA的设计312
12.1.3我们的开发方法论313
12.1.4维护SoMA313
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.1Python在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.1Python在Smesh中的角色321
12.4.2平台321
12.4.3高性能的实时字符串匹配322
12.4.4报告、监控、调试和部署323
12.5PyPy促成了成功的Web和数据处理系统324
12.5.1先决条件325
12.5.2数据库325
12.5.3Web应用326
12.5.4OCR和翻译326
12.5.5任务分发和工作者327
12.5.6结论327
12.6在Lanyrd.com中的任务队列327
12.6.1Python在Lanyrd中的角色328
12.6.2使任务队列变高性能328
12.6.3报告、监控、调试和部署328
12.6.4对开发者同行的建议329