Python 提供了几个用于多线程编程的模块,包括thread, threading 和Queue 等。thread 和threading 模块允许程序员创建和管理线程。thread 模块提供了基本的线程和锁的支持,而threading提供了更高级别,功能更强的线程管理的功能。Queue 模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。
注意:避免使用thread模块,因为它不支持守护线程。当主线程退出时,所有的子线程不论它们是否还在工作,都会被强行退出。
下面重点说说threading模块。
我们的多线程继承threading模块里的Thread类,它的主要函数有:
函数 描述
start() 开始线程的执行
run() 定义线程的功能的函数(一般会被子类重写)
join(timeout=None) 程序挂起,直到线程结束;如果给了timeout,则最多阻塞timeout 秒
getName() 返回线程的名字
setName(name) 设置线程的名字
isAlive() 布尔标志,表示这个线程是否还在运行中
isDaemon() 返回线程的daemon 标志
setDaemon(daemonic) 把线程的daemon 标志设为daemonic(一定要在调用start()函数前调用)
下面是一个例子:
import threading
import time
class mythread(threading.Thread):
def __init__(self,num):
threading.Thread.__init__(self)
self.num = num
def run(self):
if self.num < 2:
time.sleep(self.num);
print self.num
if __name__ == '__main__':
nums=[1,2,3,4,5]
for num in nums:
t = mythread(num)
t.start()
在main函数里,同时启动5个线程,如果num < 3,就先休眠一会儿,因此2,3,4,5最先被打印出来,1最后被打印出来。