目录
一、多线程模块:threading
二、模块的函数
1创建线程
2.开始线程
3.等待线程
4.线程锁
5.当前存活的线程数量
提示:以下是本篇文章正文内容,下面案例可供参考
threading模块是python自带的一个关于多线程的模块。它使用简单,支持创建多个线程,共享数据、锁定线程。
导入模块
import threading
格式:
threading.Thread(group=None,target=None,name=None,args=(),kwargs={},daemon=None)
参数group用于线程分组管理,传入线程的组名。不常用。
参数target,用于传入线程将要调用的对象,可以是方法或是类
参数name,用于传入线程的名称。
参数args,用于传入调用对象的参数,传入的必须是一个元组
参数kwargs ,是用于调用目标函数的关键字参数字典
参数daemon ,将显式地设置该线程是否为守护模式。当daemon=True是开启守护模式,主线程结束时,创建的线程直接结束。当daemo保存默认值时,主线程结束时,创建的线程继续运行直到结束。
例子:
import threading def task(num): #创建一个方法 print("成功创建1个线程") print(f"线程的名字是:{t.name}") print(f"传入的参数是:{num}") t=threading.Thread(target=task,name="下载",args="8") #创建一个线程 t.start() #开始线程
函数:
start()
创建好线程后调用,它在一个线程里最多只能被调用一次。
例子:
import threading def task(): #创建一个方法 print("成功创建1个线程") t=threading.Thread(target=task) #创建一个线程 t.start() #开始线程
函数:
join(timeout=None)
当线程调用join()方法后
如果timeout 参数不存在或者是 None ,会阻塞调用这个方法的线程,直到线程执行结束后,才会执行join()方法后面的代码。
如果timeout 参数存在而且不是 None 时,它应该是一个用于指定操作超时的以秒为单位的浮点数或者分数。
例子:
import threading from time import sleep def task(): #创建一个方法 print("创建1个线程\n") sleep(1) #延时1秒 print("线程创建成功") t=threading.Thread(target=task) #创建一个线程 t.start() #开始线程 t.join() #等待线程直至结束 print("线程已结束")
函数:
threading.Lock()
用于锁住某个变量或其他的东西,防止不同的线程同时调用同一个变量。Lock()有两种方法:分别是 acquire() 和 release()。 acquire() 将状态改为锁定 , release() 将其改为非锁定状。
例子:
import time import threading as tg task=100000 #每个线程的任务数量 thread=10 #线程数量 num=0 #所有线程完成的任务数量 threads=[] #用于保存所有的线程 lock=tg.Lock() #一把锁(用于锁住某个变量或其他的东西,防止不同的线程同时调用同一个变量) def download(): #创建一个方法,供线程调用 global num for i in range(task): lock.acquire() #锁定,防止别的线程读取/修改 num +=1 #完成1个任务,总数加一 lock.release() #解锁,让别的线程的能够读取/修改 for i in range(thread): t=tg.Thread(target=download) #创建线程 ,并传入该线程要调用的方法 threads.append(t) #将创建的线程存到列表 t.start() #开始线程 print(tg.active_count()) for t in threads: t.join() #等待所有线程执行完成,再执行后面的代码 print(f"应完成的任务数 :{task*thread}") print(f"实际完成的任务数:{num}")
格式:
threading.active_count()
返回当前存活的线程的数量。 返回值与 enumerate() 所返回的列表长度一致。
例子:
import threading from time import sleep def task(): #创建一个方法 print("创建1个线程\n") sleep(1) #延时1秒 print(f"线程{t.name}创建成功") t=threading.Thread(target=task) #创建一个线程 t.start() #开始线程 num=threading.active_count() #返回当前存活的线数量 print(f"当前存活的线数量=主线程+创建的线程={num}") t.join() #等待线程直至结束 print("创建的线程已结束") num=threading.active_count() #返回当前存活的线数量 print(f"当前存活的线数量=主线程={num}")
Python多线程实战!_哔哩哔哩_bilibili