多线程
import threading# 当前处于活动状态的线程个数print(threading.active_count())# 返回当前的Thread对象print(threading.current_thread())# 返回主线程对象print(threading.main_thread())
添加线程
子线程不会阻塞主线程。
import threadingimport time# 创建一个子线程# - 线程对象# - 函数体# 函数体def printMessage(message):time.sleep(2)print("HI~")print(message)# 创建线程对象 target指定函数体,name指定进程名称 args接受参数t = threading.Thread(target=printMessage,name="my thread",args=["有一点想你"])# 启动线程t.start()print("线程已经启动辣~")
输出结果:
线程已经启动辣~HI~有一点想你
自定义线程类实现线程体
import threadingimport timeclass MyThread(threading.Thread):def __init__(self,message,*args,**kwargs):super().__init__(*args,**kwargs)self.message = messagedef run(self):time.sleep(2)print("HI")print(self.message)t = MyThread(name="myThread",message="想你了咋治?")t.start()print("不想见不到你~")
输出结果:
不想见不到你~HI想你了咋治?
线程管理
有时,一个线程(假设是主线程)需要等待另外一个线程(假设是
t1子线程)执行结束才能继续执行。
t.start()t.join() # 阻塞进程,t结束后才继续进行
线程池
from concurrent.futures import ThreadPoolExecutordef printMessage(message):print(message)return message# 使用方法1with ThreadPoolExecutor() as pool:for i in range(100):pool.submit(printMessage,i)# 使用方法2with ThreadPoolExecutor() as pool:# results 为printMessage的返回值集合,顺序与map的第二个参数的顺序一致results = pool.map(printMessage,range(1,100))for result in results:print(result)
