在线客服
Python高性能编程图书
人气:57

Python高性能编程

深刻理解Python的实现 让你的Python代码运行的更快,本书通过介绍改善优化Python计算速度和可扩展性的策略,从而消除人们的这种误 解。
  • 所属分类:图书 >计算机/网络>程序设计>其他  
  • 作者:[美] [Micha] [Gorelick] [戈雷利克] Ian [Ozsvald] [欧日沃尔德]
  • 产品参数:
  • 丛书名:--
  • 国际刊号:9787115454898
  • 出版社:人民邮电出版社
  • 出版时间:2017-06
  • 印刷时间:2017-05-01
  • 版次:1
  • 开本:16开
  • 页数:--
  • 纸张:胶版纸
  • 包装:平装-胶订
  • 套装:

内容简介

Python语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理、机器学习、科学计算、推荐系统构建等。 本书共有12章,围绕如何进行代码优化和加快实际应用的运行速度进行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。后,通过一系列真实案例展现了在应用场景中需要注意的问题。 本书适合初级和中级Python程序员、有一定Python语言基础想要得到进阶和提高的读者阅读。

编辑推荐

Python代码仅仅能够正确运行还不够,你需要让它运行得更快。通过探索设计决策背后的基础理论,本书帮助你更加深刻地理解Python的实现。你将学习如何找到性能瓶颈,以及如何在大数据量的程序中显著加快代码。 如何利用多核架构或集群的优点?如何构建一个在不损失性的情况下具备可伸缩性的系统?有经验的Python程序员将学到针对这些问题或者其他问题的具体解决方案,以及来自那些在社交媒体分析、产品化机器学习和其他场景下使用高性能Python编程的公司的成功案例。 通过阅读本书,你将能够: ■ 更好地掌握numpy、Cython和剖析器; ■ 了解Python如何抽象化底层的计算机架构; ■ 使用剖析手段来寻找CPU时间和内存使用的瓶颈; ■ 通过选择合适的数据结构来编写高效的程序 ■ 加速矩阵和矢量计算; ■ 使用工具把Python编译成机器代码; ■ 管理并发的多I O和计算操作; ■ 把多进程代码转换到在本地或者远程集群上运行; ■ 用更少的内存解决大型问题。 “ 尽管P y thon在学术和工业领域很流行, 但人们也经常由于Python程序运行太慢而放弃它。本书通过介绍改善优化Python计算速度和可扩展性的策略,从而消除人们的这种误 解。”——Jake VanderPlas 华盛顿大学

作者简介

Micha Gorelick在bitly公司从事与数据打交道的工作,并负责建立了快速前进实验室(Fast Forward Labs),研究从机器学习到高性能流算法领域的问题。 Ian Ozsvald是ModelInsight.io的数据科学家和教师,有着超过十年的Python经验。他在yCon和PyData会议上教授Python编程,这几年一直在英国从事关于数据科学和高性能计算方面的咨询工作。

目录

目录

第1章理解高性能Python1

1.1基本的计算机系统1

1.1.1计算单元2

1.1.2存储单元5

1.1.3通信层6

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

1.3为什么使用Python12

第2章通过性能分析找到瓶颈15

2.1高效地分析性能16

2.2Julia集合的介绍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

第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.7Shed Skin140

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 ve Pool解决方案225

9.5.3Less 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.2Skype的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为鲁棒生产集群的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自适应实验室(Adaptive Lab)的社交媒体分析(SoMA)311

12.1.1自适应实验室(Adaptive Lab)使用的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

网友评论(不代表本站观点)

来自请***(**的评论:

非常满意 推荐大家购买

2017-07-21 12:55:23
来自请***(**的评论:

非常满意 推荐大家购买

2017-07-21 12:55:36
来自g***h(**的评论:

ok ok

2017-07-24 23:04:56

免责声明

更多相关图书