进程是资源单位
线程是执行单位
多线程:
第一种方法:
from threading import Thread #导入线程包
t = Thread(target = 任务) # 创建线程并安排任务
t.start() # 将线程状态表示为可以开始,具体时间由CPU决定
注意:创建多线程时,想要区分子线程,可以在Thread()中,使用args=()给线程命名,但是传递的参数必须为元组,所以在只有单个参数的时候,需要格外加“,”,确保该参数是元组而不是字符串
第二种方法:
1.声明Thread类:MyThead
在MyThead中创建任务run()
2.在主函数中定义一个MyThead类:t
t.start() # 开启线程
多进程
from multiprocessing import Process # 导包
p = Process(target=任务)
p.start()
第二种方法:
1.声明Process类:MyProcess
在MyProcess中创建任务run()
2.在主函数中定义一个MyProcess类:t
t.start() # 开启线程
线程池与进程池:(反复利用线程,节约资源)
线程池:一次性开辟一些线程,我们直接给线程池提交任务,线程任务的调度交给线程池自己完成
1.导入线程池与进程池模块
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
2.创建线程池
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
def fn(name):
for i in range(1000):
print(name, i)
if __name__ == '__main__':
# 创建线程池
with ThreadPoolExecutor(50) as t:
for i in range(100):
t.submit(fn, name=f"线程{1}") #submit()里面是 任务+ 任务需要的参数值
# with 以外的会等待线程池中的任务全部执行完成,才继续执行(守护机制)
print("123")