热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python高性能第二版_Python高性能第2版

第1章基准测试与剖析11.1设计应用程序21.2编写测试和基准测试程序71.3使用pytest-benchmark编写更佳的测试和基准测试程序101.4使用cProf

第 1 章 基准测试与剖析 1

1.1 设计应用程序 2

1.2 编写测试和基准测试程序 7

1.3 使用pytest-benchmark 编写更佳的测试和基准测试程序 10

1.4 使用cProfile 找出瓶颈 12

1.5 使用line_profiler 逐行进行剖析 16

1.6 优化代码 17

1.7 模块dis 19

1.8 使用memory_profiler 剖析内存使用情况 19

1.9 小结 21

第 2 章 纯粹的Python 优化 22

2.1 有用的算法和数据结构 22

2.1.1 列表和双端队列 23

2.1.2 字典 25

2.1.3 集 28

2.1.4 堆 29

2.1.5 字典树 30

2.2 缓存和memoization 32

2.3 推导和生成器 34

2.4 小结 36

第3 章 使用NumPy 和Pandas 快速执行数组操作 37

3.1 NumPy 基础 37

3.1.1 创建数组 38

3.1.2 访问数组 39

3.1.3 广播 43

3.1.4 数学运算 45

3.1.5 计算范数 46

3.2 使用NumPy 重写粒子模拟器 47

3.3 使用numexpr zui大限度地提高性能 49

3.4 Pandas 51

3.4.1 Pandas 基础 51

3.4.2 使用Pandas 执行数据库式操作 55

3.5 小结 59

第4 章 使用Cython 获得C 语言性能 60

4.1 编译Cython 扩展 60

4.2 添加静态类型 62

4.2.1 变量 63

4.2.2 函数 64

4.2.3 类 65

4.3 共享声明 66

4.4 使用数组 67

4.4.1 C 语言数组和指针 67

4.4.2 NumPy 数组 69

4.4.3 类型化内存视图 70

4.5 使用Cython 编写粒子模拟器 72

4.6 剖析Cython 代码 75

4.7 在Jupyter 中使用Cython 78

4.8 小结 80

第5 章 探索编译器 82

5.1 Numba 82

5.1.1 Numba 入门 83

5.1.2 类型特殊化 84

5.1.3 对象模式和原生模式 85

5.1.4 Numba 和NumPy 88

5.1.5 JIT 类 91

5.1.6 Numba 的局限性 94

5.2 PyPy 项目 95

5.2.1 安装PyPy 95

5.2.2 在PyPy 中运行粒子模拟器 96

5.3 其他有趣的项目 97

5.4 小结 97

第6 章 实现并发性 98

6.1 异步编程 98

6.1.1 等待I/O 99

6.1.2 并发 99

6.1.3 回调函数 101

6.1.4 future 104

6.1.5 事件循环 105

6.2 asyncio 框架 108

6.2.1 协程 108

6.2.2 将阻塞代码转换为非阻塞代码 111

6.3 响应式编程 113

6.3.1 被观察者 113

6.3.2 很有用的运算符 115

6.3.3 hot 被观察者和cold 被观察者 118

6.3.4 打造CPU 监视器 121

6.4 小结 123

第7 章 并行处理 124

7.1 并行编程简介 124

7.2 使用多个进程 127

7.2.1 Process 和Pool 类 127

7.2.2 接口Executor 129

7.2.3 使用蒙特卡洛方法计算pi 的近似值 130

7.2.4 同步和锁 132

7.3 使用OpenMP 编写并行的Cython代码 134

7.4 并行自动化 136

7.4.1 Theano 初步 137

7.4.2 Tensorflow 142

7.4.3 在GPU 中运行代码 144

7.5 小结 146

第8 章 分布式处理 148

8.1 分布式计算简介 148

8.2 Dask 151

8.2.1 有向无环图 151

8.2.2 Dask 数组 152

8.2.3 Dask Bag 和DataFrame 154

8.2.4 Dask distributed 158

8.3 使用PySpark 161

8.3.1 搭建Spark 和PySpark 环境 161

8.3.2 Spark 架构 162

8.3.3 弹性分布式数据集 164

8.3.4 Spark DataFrame 168

8.4 使用mpi4py 执行科学计算 169

8.5 小结 171

第9 章 高性能设计 173

9.1 选择合适的策略 173

9.1.1 普通应用程序 174

9.1.2 数值计算代码 174

9.1.3 大数据 176

9.2 组织代码 176

9.3 隔离、虚拟环境和容器 178

9.3.1 使用conda 环境 178

9.3.2 虚拟化和容器 179

9.4 持续集成 183

9.5 小结 184



推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了协程的概念和意义,以及使用greenlet、yield、asyncio、async/await等技术实现协程编程的方法。同时还介绍了事件循环的作用和使用方法,以及如何使用await关键字和Task对象来实现异步编程。最后还提供了一些快速上手的示例代码。 ... [详细]
author-avatar
只属于我一个人的秘密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有