第十八章 多线程编程
Python 代码的执行由 Python 虚拟机(也叫解释器主循环) 来控制。
虽然 Python 解释器中可以“运行”多个程序, 但在任意时刻,只有一个线程在解 释器中运行。与单个 CPU 的多线程原理是一样的。
对 Python 虚拟机的访问由全局解释器锁(GIL) 来控制的,也正是这个锁保证了同 一时刻只有一个线程在运行。
不建议使用 thread 模块,而推荐使用 threading 模块, 原因:
Thread 模块不支持守护进程。在主线程退出的时候,所有他其他线程没有被清除 就退出了
Threading 模块支持守护进程。 能保证所有“重要的”子线程都退出后, 进程才会 结束
Threading 模块更为先进,对线程的支持更为完善
Thread 模块中的属性可能与threading 出现冲突
低级别的 Thread 模块的同步原语只有一个,而 Threading 则有很多
time.sleep(secs):睡眠多长时间, secs 单位秒(不是毫秒)
start_new_thread(function, args keargs=None) 产生一个新的线程,在新线程中用指定的参 数和可选的 kwargs 来调用这个函数
Threading 的 Thread 类是我们主要的运行对象。它有很多 Thread 模块中没有的函数。
函数 | 描述 |
start() | 开始线程的执行 |
run() | 定义线程的功能的函数(一般会被子类重写) |
join(timeout=None) | 程序挂起直到线程结束;给了 timeout,则最多阻塞 timeout 秒 |
getName() | 返回线程的名字 |
setName(name) | 设置线程的名字 |
isAlive() | 布尔标志,标示这个线程是否还在运行中 |
isDaemon() | 返回线程的 daemon 标志 |
setDaemon(daemonic) | 把线程的 daemon 标志设为 daemonic (一定要在 start()前调用) |
注: thread.start()前调用 thread.setDaemon(True)表示这个线程“不重要”