阻塞 非阻塞--day35
"""
----阻塞 非阻塞----
程序遇到了IO操作,无法继续执行代码,叫做阻塞
程序没有遇到IO操作,正常执行中,就叫非阻塞
它们指的是程序的状态
就绪 运行 阻塞
就绪和阻塞给人的感觉就是卡主了
同步 异步
同步(调用/执行/任务/提交),发起任务后必须等待任务结束,拿到一个结果才能继续运行
异步 发起任务后不需要关系任务的执行过程,可以继续往下运行
异步效率高于同步
但是并不是所有任务都可以异步执行,判断一个任务是否可以异步的条件是,任务发起方是否立即需要执行结果
同步不等于阻塞 异步不等于非阻塞
当使用异步方式发起任务时 任务中可能包含io操作 异步也可能阻塞
同步提交任务 也会卡主程序 但是不等同阻塞,因为任务中可能在做一对计算任务,CPU没走
"""
# 使用线程池 来执行异步任务
from concurrent.futures import ThreadPoolExecutor import time pool = ThreadPoolExecutor() def task(i): time.sleep(1) print("sub thread run..") i += 100 return i fs = [] for i in range(10): f = pool.submit(task, i) # submit就是一异步的方式提交任务 # print(f) # print(f.result()) # result是阻塞的 会等到这任务执行完成才继续执行 ,会异步变成同步 fs.append(f) # 是一个阻塞函数,会等到池子中所有任务完成后继续执行 pool.shutdown(wait=True) # pool.submit(task,1) # 注意 在shutdown之后 就不能提交新任务了 for i in fs: print(i.result()) print("over")