线程池是一个全新的模块-- from concurrent.futures import ThreadPoolExecutor
concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor:线程池,提供异步调用
ProcessPoolExecutor: 进程池,提供异步调用线程池与进程池的用法完全一样,提供的接口也是完全一致的
线程池不提供同步提交任务的方法,只有异步提交
submit()
shutdown(wait) 相当于进程池的pool.close + pool.join()的操作
wait = True 等待池内所有任务执行完毕回收玩资源后才继续
wait = False 立即返回,并不会等待池内的任务执行完毕
submit 和 map 必须在shutdown之前
map 拿不到返回值
result() 取结果
add_done_callback(fn) 回调函数
import time
from concurrent.futures import ThreadPoolExecutor
def func(n):
    time.sleep(1)
    print(f'[{n}]',end='\t')
    return n*n
tp = ThreadPoolExecutor(max_workers=3)
for i in range(1,22):
    t = tp.submit(func,i)
    print(f'{i}的幂为:',t.result(),end='\t')
    if i %3 == 0:
        print()
tp.shutdown() # 相当于close+join  没有shutdown会更高效
print()
print('所有子进程结束!')
'''
[1] 1的幂为: 1     [2] 2的幂为: 4     [3] 3的幂为: 9 
[4] 4的幂为: 16    [5] 5的幂为: 25    [6] 6的幂为: 36    
[7] 7的幂为: 49    [8] 8的幂为: 64    [9] 9的幂为: 81    
[10]    10的幂为: 100  [11]    11的幂为: 121  [12]    12的幂为: 144  
[13]    13的幂为: 169  [14]    14的幂为: 196  [15]    15的幂为: 225  
[16]    16的幂为: 256  [17]    17的幂为: 289  [18]    18的幂为: 324  
[19]    19的幂为: 361  [20]    20的幂为: 400  [21]    21的幂为: 441  
所有子进程结束!
'''import time
from concurrent.futures import ThreadPoolExecutor
def func(n):
    time.sleep(1)
    return n*n
def task(m):
    print(f'******{m.result()}*******')
tp = ThreadPoolExecutor(max_workers=3)
for i in range(3):
    tp.submit(func,i).add_done_callback(task)
    
'''
******0*******
******1*******
******4*******
'''原文:https://www.cnblogs.com/dadazunzhe/p/11545541.html