'''
concurrent.futures 模块提供了高度封装的异步调用接口
ThreadPoolExecutor :线程池,提供异步调用
ProcessPoolExecutor:进程池,提供异步调用。
基本方法:
submit(fn,*args,**kargs) 异步提交任务
map(func,*iterables,timeout=None,chunksize= 1)
取代for循环submit的操作
shutdown(wait = True)
相当于线程池的pool.close() + pool.join()操作
wait=True 等待池内所有任务执行完毕回收资源后才继续
wait=False 立即返回,并不会等待池内的任务执行完毕
但不管wait参数为何值,整个程序都会等到所有任务执行完毕
submit和map 必须在shutdown之前
result (timeout =None)
取得结果
add_done_callback(fn)
回调函数
'''
import time
from concurrent.futures import ThreadPoolExecutor
def func(n):
time.sleep(2)
print(n)
return n*n
t= ThreadPoolExecutor(max_workers=5) #默认不要超过CUP个数的5倍
t_lst=[]
for i in range(20):
t1 =t.submit(func,i)
t_lst.append(t1)
t.shutdown()
print('主线程')
for i in t_lst:
print('***',i.result())