Python 高性能编程 PDF 文档
Python 语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理、机器学习、科学计算、推荐系统构建等。
本书共有 12 章,围绕如何进行代码优化和加快实际应用的运行速度进行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。最后,通过一系列真实案例展现了在应用场景中需要注意的问题。
本书适合初级和中级 Python 程序员、有一定 Python 语言基础想要得到进阶和提高的读者阅读。
Python 很容易学。你之所以阅读本书可能是因为你的代码现在能够正确运行,而你希望它能跑得更快。你可以很轻松地修改代码,反复地实现你的想法,你对这一点很满
意。但能够轻松实现和
代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象。而这个问题其实是可以解决的。
有些人想要让顺序执行的过程跑得更快。有些人需要利用多核架构、集群,或者图形处理单元的优势来解决他们的问题。有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作。有些人意识到他们的编程技巧,通常是来自其他语言,可能不如别人的自然。
目录
第 1 章 理解高性能 Python
1.1 基本的计算机系统
1.1.1 计算单元
1.1.2 存储单元
1.1.3 通信层
1.2 将基本的元素组装到一起
理想计算模型和 Python 虚拟机
1.3 为什么使用 Python
第 2 章 通过性能分析找到瓶颈
2.1 高效地分析性能
2.2 Julia 集合的介绍
2.3 计算完整的 Julia 集合
2.4 计时的简单方法——打印和修饰
2.5 用 UNIX 的 time 命令进行简单的计时
2.6 使用 cProfile 模块
2.7 用 runsnakerun 对 cProfile 的输出进行可视化
2.8 用 line_profiler 进行逐行分析
2.9 用 memory_profiler 诊断内存的用量
2.10 用 heapy 调查堆上的对象
2.11 用 dowser 实时画出变量的实例
2.12 用 dis 模块检查 CPython 字节码
不同的方法,不同的复杂度
2.13 在优化期间进行单元测试保持代码的正确性
No-op 的 @profile 修饰器
2.14 确保性能分析成功的策略
2.15 小结
第 3 章 列表和元组
3.1 一个更有效的搜索
3.2 列表和元组
3.2.1 动态数组:列表
3.2.2 静态数组:元组
3.3 小结
第 4 章 字典和集合
4.1 字典和集合如何工作
4.1.1 插入和获取
4.1.2 删除
4.1.3 改变大小
4.1.4 散列函数和熵
4.2 字典和命名空间
4.3 小结
第 5 章 迭代器和生成器
5.1 无穷数列的迭代器
5.2 生成器的延迟估值
5.3 小结
第 6 章 矩阵和矢量计算
6.1 问题介绍
6.2 Python 列表还不够吗
分配次数太多带来的问题
6.3 内存碎片
6.3.1 理解 perf
6.3.2 根据 perf 输出做出抉择
6.3.3 使用 numpy
6.4 用 numpy 解决扩散问题
6.4.1 内存分配和就地操作
6.4.2 选择优化点:找到需要被修正的地方
6.5 numexpr:让就地操作更快更简单
6.6 告诫故事:验证你的“优化”(scipy)
6.7 小结
第 7 章 编译成 C
7.1 可能获得哪种类型的速度提升
7.2 JIT 和 AOT 编译器的对比
7.3 为什么类型检查有助代码更快运行
7.4 使用 C 编译器
7.5 复习 Julia 集的例子
7.6 Cython
7.6.1 使用 Cython 编译纯 Python 版本
7.6.2 Cython 注解来分析代码块
7.6.3 增加一些类型注解
7.7 Shed Skin
7.7.1 构建扩展模块
7.7.2 内存拷贝的开销
7.8 Cython 和 numpy
在一台机器上使用 OpenMP 来做并行解决方案
7.9 Numba
7.10 Pythran
7.11 PyPy
7.11.1 垃圾收集的差异
7.11.2 运行 PyPy 并安装模块
7.12 什么时候使用每种工具
7.12.1 其他即将出现的项目
7.12.2 一个图像处理单元(GPU)的注意点
7.12.3 一个对未来编译器项目的展望
7.13 外部函数接口
7.13.1 ctypes
7.13.2 cffi
7.13.3 f2py
7.13.4 CPython 模块
7.14 小结
第 8 章 并发
8.1 异步编程介绍
8.2 串行爬虫
8.3 gevent
8.4 tornado
8.5 AsyncIO
8.6 数据库的例子
8.7 小结
第 9 章 multiprocessing 模块
9.1 multiprocessing 模块综述
9.2 使用蒙特卡罗方法来估算 pi
9.3 使用多进程和多线程来估算 pi
9.3.1 使用 Python 对象
9.3.2 并行系统中的随机数
9.3.3 使用 numpy
9.4 寻找素数
工作队列
9.5 使用进程间通信来验证素数
9.5.1 串行解决方案
9.5.2 Naïve Pool 解决方案
9.5.3 Less Naïve Pool 解决方案
9.5.4 使用 Manager.Value 作为一个标记
9.5.5 使用 Redis 作为一个标记
9.5.6 使用 RawValue 作为一个标记
9.5.7 使用 mmap 作为一个标记
9.5.8 使用 mmap 作为一个标记的终极效果
9.6 用 multiprocessing 来共享 numpy 数据
9.7 同步文件和变量访问
9.7.1 文件锁
9.7.2 给 Value 加锁
9.8 小结
第 10 章 集群和工作队列
10.1 集群的益处
10.2 集群的缺陷
10.2.1 糟糕的集群升级策略造成华尔街损失 4.62 亿美元
10.2.2 Skype 的 24 小时全球中断
10.3 通用的集群设计
10.4 怎样启动一个集群化的解决方案
10.5 使用集群时避免痛苦的方法
10.6 三个集群化解决方案
10.6.1 为简单的本地集群使用 Parallel Python 模块
10.6.2 使用 IPython Parallel 来支持研究
10.7 为鲁棒生产集群的 NSQ
10.7.1 队列
10.7.2 发布者/订阅者
10.7.3 分布式素数计算器
10.8 看一下其他的集群化工具
10.9 小结
第 11 章 使用更少的 RAM
11.1 基础类型的对象开销高
Array 模块以廉价的方式存储了许多基础对象
11.2 理解集合中的 RAM 使用
11.3 字节和 Unicode 的对比
11.4 高效地在 RAM 中存储许多文本
在 800 万个符号上尝试这些方法
11.5 使用更少 RAM 的窍门
11.6 概率数据结构
11.6.1 使用 1 字节的 Morris 计数器来做近似计数
11.6.2 K 最小值
11.6.3 布隆过滤器
11.6.4 LogLog 计数器
11.6.5 真实世界的例子
第 12 章 现场教训
12.1 自适应实验室(Adaptive Lab)的社交媒体分析(SoMA)
12.1.1 自适应实验室(Adaptive Lab)使用的 Python
12.1.2 SoMA 的设计
12.1.3 我们的开发方法论
12.1.4 维护 SoMA
12.1.5 对工程师同行的建议
12.2 使用 RadimRehurek.com 让深度学习飞翔
12.2.1 最佳时机
12.2.2 优化方面的教训
12.2.3 总结
12.3 在 Lyst.com 的大规模产品化的机器学习
12.3.1 Python 在 Lyst 的地位
12.3.2 集群设计
12.3.3 在快速前进的初创公司中做代码评估
12.3.4 构建推荐引擎
12.3.5 报告和监控
12.3.6 一些建议
12.4 在 Smesh 的大规模社交媒体分析
12.4.1 Python 在 Smesh 中的角色
12.4.2 平台
12.4.3 高性能的实时字符串匹配
12.4.4 报告、监控、调试和部署
12.5 PyPy 促成了成功的 Web 和数据处理系统
12.5.1 先决条件
12.5.2 数据库
12.5.3 Web 应用
12.5.4 OCR 和翻译
12.5.5 任务分发和工作者
12.5.6 结论
12.6 在 Lanyrd.com 中的任务队列
12.6.1 Python 在 Lanyrd 中的角色
12.6.2 使任务队列变高性能
12.6.3 报告、监控、调试和部署
12.6.4 对开发者同行的建议
作者简介
封面简介
下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/01/oBrKvxbnpJXagyrT.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
下一篇: 白帽子讲 Web 安全 PDF 文档
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论