我们知道 进程是 资源分 配的单 位,线 程是处 理机 调度的 单位。 下文就 以简明
的例子带 大家理 解线程 ,并使 用 Python 实现多 线程。
比如在飞 车程序 中,我 们在玩 游戏的 同时, 还可 以听到 游戏为 我们配 置的背
景音乐。在 这 个 例子 中启 动飞车 程序 就是一 个进 程,玩 游戏 和听音 乐是 两个
线 程。
单线程
在最早的 计算机 中,操 作系统 处理问 题是单 任务 的,要 玩游戏 和听音 乐,就
一定要顺 序进行 ,不能 并发。 我们假 设玩游 戏需 要 3 秒, 听音乐 需要 1 秒。
def music(music_name): for i in range(2): print('正在听
{}'.format(music_name)) sleep(1) print('music over')
def game(game_name): for i in range(2): print('正在玩
{}'.format(game_name)) sleep(3) print('game over')
if __name__ == '__main__': music('稻香') game('飞车') print('主
线程结束')
我先听了一首《稻香》,通过 for 循环控制音乐播放两次,每首音乐播放
需要 1 秒,sleep()来控制音乐播放的时长,接着又玩了两把飞车,最后关闭
了程序。
----
输出
----正在听稻香 music over 正在听稻香 music over 正在玩飞车 game over
正在玩飞车 game over 主线程结束
多线程
随着技术的不断进步,操作系统就进入了多任务时代。在单核架构中的
多线程是以极短的时间间隔交替执行任务,让人感觉它们在同时执行一样。
以“吃着火锅唱着歌”举例,若是单线程则是先吃火锅,直到吃完后再唱歌,但
是多线程的话我们可以吃一口唱一句,达到“吃着火锅唱着歌”的效果。
Python 提供了 thr eading 模块来实现多线程 。我们对上面的例子进行改
造,实现在听音乐的同时玩飞车。在此之前先为大家介绍一下线程的相关概
念。
主线程:当一个程序启动时,就有一个进程被操作系统(OS)创 建 ,与
此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main
Thread)。因为它是程序开始时就执行的,如果你需要再创建线程,那么创
建的线程就是这个主线程的子线程。
子线程:使用 thr eading、ThreadPoolExecutor 创建 的线性 均为子 线程。
主线程的重要性体现在两方面:1.是产生其他子线程的线程;2.通常它必
须最后完成执行,比如执行各种关闭动作。