Python高性能编程pdf

2019年1月16日20:47:18 发表评论 365
摘要

适读人群 :Python程序员,有一定Python语言基础想要得到进阶和提高的读者
Python代码仅仅能够正确运行还不够,你需要让它运行得更快。通过探索设计决策背后的基础理论,本书帮助你更加深刻地理解Python的实现。你将学习如何找到性能瓶颈,以及如何在大数据量的程序中显著加快代码。
如何利用多核架构或集群的优点?如何构建一个在不损失可靠性的情况下具备可伸缩性的系统?有经验的Python程序员将学到针对这些问题或者其他问题的具体解决方案,以及来自那些在社交媒体分析、产品化机器学习和其他场景下使用高性能Python编程的公司的成功案例。
通过阅读本书,你将能够:
■ 更好地掌握numpy、Cython和剖析器;
■ 了解Python如何抽象化底层的计算机架构;
■ 使用剖析手段来寻找CPU时间和内存使用的瓶颈;
■ 通过选择合适的数据结构来编写高效的程序
■ 加速矩阵和矢量计算;
■ 使用工具把Python编译成机器代码;
■ 管理并发的多I/O和计算操作;
■ 把多进程代码转换到在本地或者远程集群上运行;
■ 用更少的内存解决大型问题。

Python高性能编程 内容简介

Python语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理、机器学习、科学计算、推荐系统构建等。

本书共有12章,围绕如何进行代码优化和加快实际应用的运行速度进行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。最后,通过一系列真实案例展现了在应用场景中需要注意的问题。

本书适合初级和中级Python程序员、有一定Python语言基础想要得到进阶和提高的读者阅读。

Python高性能编程 目录

前言

第1章 理解高性能Python

1.1 基本的计算机系统

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

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 在优化期间进行单元测试保持代码的正确性

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

2.15 小结

第3章 列表和元组

3.1 一个更有效的搜索

3.2 列表和元组

3.3 小结

第4章 字典和集合

4.1 字典和集合如何工作

4.2 字典和命名空间

4.3 小结

第5章 迭代器和生成器

5.1 无穷数列的迭代器

5.2 生成器的延迟估值

5.3 小结

第6章 矩阵和矢量计算

6.1 问题介绍

6.2 Python列表还不够吗

6.3 内存碎片

6.4 用numpy解决扩散问题

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.7 Shed Skin

7.8 Cython和numpy

7.9 Numba

7.10 Pythran

7.11 PyPy

7.12 什么时候使用每种工具

7.13 外部函数接口

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.4 寻找素数

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

9.6 用multiprocessing来共享numpy数据

9.7 同步文件和变量访问

9.8 小结

第10章 集群和工作队列

10.1 集群的益处

10.2 集群的缺陷

10.3 通用的集群设计

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

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

10.6 三个集群化解决方案

10.7 为鲁棒生产集群的NSQ

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

10.9 小结

第11章 使用更少的RAM

11.1 基础类型的对象开销高

11.2 理解集合中的RAM使用

11.3 字节和Unicode的对比

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

11.5 使用更少RAM的窍门

11.6 概率数据结构

第12章 现场教训

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

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

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

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

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

12.6 在Lanyrd.com中的任务队列

Python高性能编程 精彩文摘

读完本章之后你将能够回答下列问题

计算机架构有哪些元素?

常见的计算机架构有哪些?

计算机架构在Python中的抽象表达是什么?

实现高性能Python代码的障碍在哪里?

性能问题有哪些种类?

计算机编程可以被认为是以特定的方式进行数据的移动和转换来得到某种结果。然而这些操作有时间上的开销。因此,高性能编程可以被认为是通过降低开销(比如撰写更高效的代码)或改变操作方式(比如寻找一种更合适的算法)来让这些操作的代价最小化。

数据的移动发生在实际的硬件上,我们可以通过降低代码开销的方式来了解更多硬件方面的细节。这样的练习看上去可能没什么用,因为Python做了很多工作将我们对硬件的直接操作抽象出来。然而,通过理解数据在硬件层面的移动方式以及Python在抽象层面移动数据的方式,你会学到一些编写高性能Python程序的知识。

一台计算机的底层组件可被分为三大基本部分:计算单元,存储单元,以及两者之间的连接。除此之外,这些单元还具有多种属性帮助我们了解它们。计算单元有一个属性告诉我们它每秒能够进行多少次计算,存储单元有一个属性告诉我们它能保存多少数据,还有一个属性告诉我们能以多快的速度对它进行读写,而连接则有一个属性告诉我们它们能以多快的速度将数据从一个地方移动到另一个地方。

通过这些基本单元,我们就可以在各种不同的复杂度级别上描述一个标准工作站。例如,一个标准工作站可以被看作是具有一个中央处理单元(CPU)作为其计算单元,两个独立的存储单元,分别是随机访问内存(RAM)和硬盘(各自有不同的容量和读写速度),最后还有一个总线将所有这些连接在一起。然而,我们还可以深入CPU并发现其内部也有多个存储单元:L1、L2,有时甚至有L3和L4缓存,它们的容量较小(从几KB到十几MB)但速度非常快。这些额外的存储单元通过一个被称为后端总线的特殊总线连接CPU。另外,新的计算机架构通常会有新的配置(比如Intel的Nehalem架构的CPU用英特尔快速通道互联技术替换了前端总线并重新构建了很多连接)。最后,在上述案例的讨论中,我们还忽略了网络连接,这是一种慢速的连接,用于连接其他许多潜在的计算单元和存储单元。

为了帮助理清这些错综复杂的结构,让我们去浏览一下这些基本单元的简要描述。
图书网:Python高性能编程pdf

  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: