极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/04:17
登录|注册

如何加速Python代码?

讲述:丁婵大小:5.87M时长:04:17
如今,Python 如此火爆,已发展成为一种非常通用的语言,无论是从入门级选手到专业技术数据挖掘、科学计算、图像处理、人工智能,Python 都可以胜任。最近,软件 / 数据工程师里克·简·范·巴伦(Rrik-Jan van Baaren)分享了 5 个提高 Python 性能的方法,以供 Python 开发者参考。InfoQ对其进行了编译,如下。

1. 优化代码和算法

许多速度问题可以通过实现更好的算法或添加缓存来解决,但也需要遵循一些指导方针,比如:
测量代码中哪些部分运行时间最长,先把重点放在这些部分上。
实现缓存:如果你从磁盘、网络和数据库执行了多次重复的查找,那说明你该优化这部分了。
重用对象,而不是在每次迭代中创建一个新对象,释放内存。
尽可能减少代码中的迭代次数,特别是减少迭代中的操作次数。
避免(深度)递归,对于 Python 编译器来说,它需要大量的内存和维护(Housekeeping),可以改用生成器和迭代之类的工具。
减少内存使用。

2. 使用 PyPy

你可能正在使用 Python 的参考实现 CPython。之所以称为 CPython,是因为它用 C 语言编写的。如果你确定你的代码是 CPU 密集型(CPU bound),那么你应该研究一下 PyPy,它是 CPython 的替代方案。这可能是一种快速解决方案,无需更改任何一行代码。
PyPy 声称,它的平均速度比 CPython 要快 4.4 倍,因为它是 JIT 技术来实现的,Java 和 .NET 框架就是 JIT 编译的著名实例。JIT 编译器可以在运行时不断优化代码,代码运行时间越长,它就会变得越优化。

3. 使用线程

大部分软件都是 IO 密集型,而不是 CPU 密集型。对于前者,软件主要是等待输入 / 输出操作完成才能工作。在从网络或缓慢的存储中获取数据时,通常会出现这种情况。对于后者,软件占用了大量的 CPU 资源。它使用了 CPU 所有的能力来产生所需的结果。
在等待来自网络或磁盘的应答时,你可以使用多个线程使其他部分保持运行状态。一个线程是一个独立的执行序列。默认情况下,Python 程序有一个主线程。但你可以创建更多的主线程,并让 Python 在它们之间快速切换。
线程是独立的执行序列,共享相同的内存空间,但与其他编程语言不同的是,Python 线程并不是同时运行的,而是轮流运行。这是因为 Python 中有一种全局解释器锁( Global Interpreter Lock,GIL)机制。
线程对于 IO 密集型的软件有很大的影响,但对 CPU 密集型的软件毫无用处。因为当一个线程在等待来自网络的答复时,其他线程可以继续运行。如果你要执行大量的网络请求,线程会带来巨大的差异和更多的开销。

4. 使用 Asyncio

Asyncio 是 Python 中一个相对较新的核心库,它解决了与线程相同的问题,它加快了 IO 密集型软件的速度。不过 Asyncio 相当复杂,特别是对于初学者来说,网上的教程和示例代码更新也跟不上其发展的速度。

5. 同时使用多个处理器

如果你的软件是 CPU 密集型的,你可以同时使用多个处理器重写你的代码。通过这种方式,你就可以线性地调整执行速度。这就是所谓的并行性,但并不是所有的算法都可以并行运行。例如,简单将递归算法进行并行化是不可能的。
使用多个处理器有两种方式:
在同一台机器内使用多个处理器和 / 或内核。
通过计算机网络来使用多个处理器,分布在多台计算机上,也就是分布式计算。
以上就是今天的内容,希望对你有所帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 云飞 Phil
    我理解得正确么?如果少量网络连接,用线程。如果很多网络连接,应该用进程或async IO
  • Weining Cao
    翻译还是有点问题。应该是多核,而不是多处理器。一般机器都只有一个处理器,但是处理器内部是多核的。我甚至觉得最后一条可能讲的是多进程。
  • 小斧
    1. 优化代码和算法 2. 使用 PyPy 3. 使用线程 4. 使用 Asyncio 5. 同时使用多个处理器
收起评论
大纲
固定大纲
1. 优化代码和算法
2. 使用 PyPy
3. 使用线程
4. 使用 Asyncio
5. 同时使用多个处理器
显示
设置
留言
3
收藏
59
沉浸
阅读
分享
手机端
快捷键
回顶部