一、threading介绍
1.threading介绍
(1)threading是对thread模块的再封装,线程并发运行并且共享内存
(2)threading模块支持守护线程
二、threading的使用
1.导入线程模块 import threading
(1)threading常用方法
threading.currentThread():返回当前的线程变量
threading.currentThread().name:返回当前的线程的名字
threading.enumerate():返回一个包含正在运行的线程的list,正在运行指启动后,结束前的线程
threading.activeCount():返回正在运行的线程数量(与len(threading.enumerate()) 有相同结果)
(2)Thread线程类的语法结构
Thread(group=None,target=None,name=None,args=(),kwargs={})
group:线程组,目前只能使用None
target:执行的方法
name:线程名
args/kwargs:要传如方法的参数
(3)Thread创建的实例对象常用方法
start():线程准备就绪,等待CPU调度
join(timeout):阻塞当前环境中的子线程,直到调用此方法的线程终止或到达指定的timeout
setName():设置线程名
getName():获取线程名
setDaemon(True):设为守护线程,一定要再调用start()前设置
2.threading多线程案例
(1)代码
import threading
import time
def run_001(name):
print(threading.current_thread().name, time.ctime())
print("你好,%s"%name)
time.sleep(2)
print("第一个线程结束...%s"%time.ctime())
def run_002(name):
print(threading.current_thread().name, time.ctime())
print("你好,%s"%name)
time.sleep(1)
print("第二个线程结束...%s" % time.ctime())
def run_003():
print(threading.current_thread().name, time.ctime())
time.sleep(3)
print("第三个线程结束...%s"%time.ctime())
if __name__ == '__main__':
print("---主线程开始---",threading.current_thread().name)
t1 = threading.Thread(target=run_001,args=("suner",))
t2 = threading.Thread(target=run_002,args=("wang",))
t3 = threading.Thread(target=run_003)
t1.start()
t2.start()
t3.start()
print("---主线程结束---",threading.current_thread().name)
(2)结果
3.列表式使用
利用列表方式,实现多线程并发执行效果
(1)代码
import threading
import time
def run(num):
print("%s线程开始..."%threading.current_thread().name)
print("正在打印...%s"%num)
time.sleep(2)
print("%s线程结束..."%threading.current_thread().name)
if __name__ == '__main__':
print("---主线程开始---", threading.current_thread().name)
thread_list = []
for i in range(5):
# 创建一个线程,并将创建的线程添加到线程列表
t = threading.Thread(target=run, args=(i,))
thread_list.append(t)
# 循环线程列表,统一执行
for t in thread_list:
t.start()
print("---主线程结束---", threading.current_thread().name)
(2)结果
4.join用法
(1)代码
import threading
import time
def run(num):
print("%s线程开始..."%threading.current_thread().name)
print("正在打印...%s"%num)
time.sleep(2)
print("%s线程结束..."%threading.current_thread().name)
if __name__ == '__main__':
print("---主线程开始---", threading.current_thread().name)
thread_list = []
for i in range(1,6):
# 创建一个线程,并将创建的线程添加到线程列表
t = threading.Thread(target=run, args=(i,))
thread_list.append(t)
# 循环线程列表,统一执行
for t in thread_list:
t.start()
t.join()
print("---主线程结束---", threading.current_thread().name)
(2)结果