多线程
import threading
# 当前处于活动状态的线程个数
print(threading.active_count())
# 返回当前的Thread对象
print(threading.current_thread())
# 返回主线程对象
print(threading.main_thread())
添加线程
子线程不会阻塞主线程。
import threading
import 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 threading
import time
class MyThread(threading.Thread):
def __init__(self,message,*args,**kwargs):
super().__init__(*args,**kwargs)
self.message = message
def 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 ThreadPoolExecutor
def printMessage(message):
print(message)
return message
# 使用方法1
with ThreadPoolExecutor() as pool:
for i in range(100):
pool.submit(printMessage,i)
# 使用方法2
with ThreadPoolExecutor() as pool:
# results 为printMessage的返回值集合,顺序与map的第二个参数的顺序一致
results = pool.map(printMessage,range(1,100))
for result in results:
print(result)