自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
由于线程是操作系统直接支持的执行单元,因此,高级语言(如Python、Java等)通常都内置多线程的支持。Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。
1 使用threading模块创建线程
threading模块提供了一个Thread类来代表一个线程对象,语法如下:
Thread([group [, target [, name [, args [, kwargs]]]]])
Thread类的参数说明如下:
l group:值为None,为以后版本而保留。
l target:表示一个可调用对象,线程启动时,run()方法将调用此对象,默认值为None,表示不调用任何内容。
l name:表示当前线程名称,默认创建一个“Thread-N”格式的唯一名称。
l args:表示传递给target()函数的参数元组。
l kwargs:表示传递给target()函数的参数字典。
对比发现,Thread类和前面讲解的Porcess类的方法基本相同,这里就不再赘述了。下面,通过一个例子来学习一下如何使用threading模块创建线程。代码如下:
# -*- coding:utf-8 -*-
import threading,time
def process():
for i in range(3):
time.sleep(1)
print("thread name is %s" % threading.current_thread().name)
if __name__ == '__main__':
print("-----主线程开始-----")
threads = [threading.Thread(target=process) for i in range(4)] # 创建4个线程,存入列表
for t in threads:
t.start() # 开启线程
for t in threads:
t.join() # 等待子线程结束
print("-----主线程结束-----")
上述代码中,创建了4个线程,然后分别用for循环执行次start()和jion()方法。每个子线程分别执行输出3次。运行结果如图15所示。
图15 创建多线程
注意:从图15中可以看出,线程的执行顺序是不确定的。
2 使用Thread子类创建线程
Thread线程类和Process进程类的使用方式非常相似,也可以通过定义一个子类,使其继承Thread线程类来创建线程。下面通过一个示例学习一下使用Thread子类创建线程的方式。
实例05 使用Thread子类创建线程
创建一个子类SubThread,继承threading.Thread线程类,并定义一个run()方法。实例化SubThread类创建2个线程,并且调用start()方法开启线程,程序会自动调用run()方法。代码如下:
# -*- coding: utf-8 -*-
import threading
import time
class SubThread(threading.Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "子线程"+self.name+'执行,i='+str(i)# name属性中保存的是当前线程的名字
print(msg)
if __name__ == '__main__':
print('-----主线程开始-----')
t1 = SubThread() # 创建子线程t1
t2 = SubThread() # 创建子线程t2
t1.start() # 启动子线程t1
t2.start() # 启动子线程t2
t1.join() # 等待子线程t1
t2.join() # 等待子线程t2
print('-----主线程结束-----')
运行结果如图16所示。
图16 使用Thread子类创建线程