多线程
1.多线程介绍
如果我们把CPU比作一个工厂,这个工厂里面有多个车间,每一个车间就是一个进程;每一个车间有多个工人,每一个工人就是一个线程。我们之所以要学习多线程就是为了在同一时间里完成多项任务。
python中的多线程使用的是threading模块。
我们来看下面的一个例子,
import time
def drinking():
for x in range(3):
print("正在喝啤酒:%s" % x)
time.sleep(1)
def eating():
for x in range(3):
print("正在吃小龙虾:%s" % x)
time.sleep(1)
def main():
drinking()
eating()
if __name__ == '__main__':
main()
执行结果如下,
正在喝啤酒:0
正在喝啤酒:1
正在喝啤酒:2
正在吃小龙虾:0
正在吃小龙虾:1
正在吃小龙虾:2
我们可以发现系统会在drinking()执行完毕后再执行eating(),如果我们要同时执行drinking()和eating()就需要使用多线程的方式进行了。例如,
import threading
import time
def drinking():
for x in range(3):
print("正在喝啤酒:%s" % x)
time.sleep(1)
def eating():
for x in range(3):
print("正在吃小龙虾:%s" % x)
time.sleep(1)
def main():
t1 = threading.Thread(target=drinking) # 创建线程并且指定目标
t2 = threading.Thread(target=eating)
t1.start() # 开启线程
t2.start()
if __name__ == '__main__':
main()
执行结果如下,
正在喝啤酒:0
正在吃小龙虾:0
正在吃小龙虾:1
正在喝啤酒:1
正在喝啤酒:2
正在吃小龙虾:2
在上例中,我们创建了两个Thread对象,Thread对象执行target参数中的方法为执行方法,分别用于执行drinking()和eating(),使用start()方法让线程开始任务。
我们可以看到drinking()和eating()同时执行。
2.自定义线程类
我们可以自定义一个类继承于threading.Thread类。threading.Thread类中的run()方法是当创建Thread对象的时候,如果没有传入target参数,则会执行run()方法中的代码。因此,我们需要对run()方法进行重写。
我们使用自定义线程类的方式重写上例,
import threading
import time
class D