[]时间管理很重要:Python代码的优化之道( 二 )


但这并不意味着它没有用 。 这是一种强大的范例 , 可用于许多高性能应用程序 。
[]时间管理很重要:Python代码的优化之道
本文插图
4.使用多线程
多数软件系统为I/O密集型 , 而非计算密集型:
· I/O密集型 —软件系统通常在等待输入/输出操作完成 。 从网络或慢速存储器中获取数据时通常是这种情况 。
· 计算密集型 —软件系统使CPU(中央处理器)达到极限 。 它使用CPU的所有功能来生成所需的结果 。
在从网络或磁盘中等待回答时 , 可以使用多个线程维持其他部分的运行 。
线程是独立的执行序列 。 默认情况下 , Python程序具有一个主线程 。 但可以创建更多线程 , 并让Python在不同线程之间转换 。 这种转换发生非常快 , 显得似乎在同时并排运行 。
[]时间管理很重要:Python代码的优化之道
本文插图
线程是独立的执行序列 , 共享相同的存储
不同于其他语言 , Python多线程不能同时运行 , 而是轮流运行 , 这主要是因为它的全局解释器锁(GIL)的机制 。
可见 , 多线程将对I / O密集型软件系统产生巨大影响 , 但对计算密集型软件系统而言用途甚微 。
为何会这样?很简单 。 当一个线程等待来自网络的回答时 , 其他线程能够继续运行 。 如果执行大量网络请求 , 使用多线程会大有不同 。 但如果多线程正在执行大量计算 , 则它们只是等候自己的轮次再继续执行 。 线程只会引入更多的开销 。
[]时间管理很重要:Python代码的优化之道
本文插图
图源:fadeevab
[]时间管理很重要:Python代码的优化之道
本文插图
5. 同时使用更多处理器
如果软件系统为计算密集型 , 则通常可以通过同时使用更多处理器的方式来重写代码 。 这样 , 就可以线性扩展执行速度 。
这被称做并行性 。 并非所有算法都可以并行运行 。 例如 , 简单地并行化递归算法是不可能的 。 但是几乎总会有一种替代算法可以很好地进行并行工作 。
有两种使用更多处理器的方式:
1. 在同一台计算机上使用多个处理器和/或内核 。 在Python中 , 这可以通过使用多处理库来完成 。
2. 用计算机网络来使用分布在多台机器上的处理器 。 我们称其为分布式计算 。
不同于线程库 , 多处理库绕过了Python全局解释器锁 。 它实际上是通过生成多个Python实例来实现的 。 因此 , 使用多线程在一个Python进程中轮流执行 , 你将拥有多个Python处理器来同时运行代码 。
[]时间管理很重要:Python代码的优化之道
本文插图
可视化多处理
多处理库又与线程库十分相似 。 那为什么还要考虑线程化?没错 , 线程处理“更轻便” 。 它只需要一个正在运行的Python解释器 , 所需的内存更少 , 生成新进程也有其开销 。 因此 , 如果代码为I/O密集型 , 使用线程可能足够了 。
使软件系统并行工作后 , 将分布式计算与诸如Hadoop之类的功能结合使用仅需一小步 。 通过利用云计算平台 , 目前可以相对轻松地加快运行速度 。 例如 , 可以在云中处理庞大的数据集 , 并在本地使用结果 。 使用混合操作方式 , 可以节省一些现金 , 要知道 , 云平台的计算功能可是非常昂贵的 。
[]时间管理很重要:Python代码的优化之道
本文插图
图源:unsplash
希望以上这些小技巧能够帮你拥有更快更强的代码 。