1,线程池代码示例:(注:进程池的话只要将以下代码中的ThreadPoolExecutor替换成ProcessPoolExecutor即可,这里不演示)
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) return n*n #max_workers 指定线程池多大 #1,创建线程池 tpool = ThreadPoolExecutor(max_workers=5) #默认 不要超过cpu个数*5 t_lst = [] #2,线程池异步提交 for i in range(20): t = tpool.submit(func,i) t_lst.append(t) tpool.shutdown() #close+join #3,获取结果 print('主线程') #这一步是一定按照顺序打印的 for t in t_lst:print('***',t.result())
运行结果:
2,tpool.shutdown() #close+join 如果没有shutdowm()函数,将出现边进入列表边打印现象,根据需求选择要不要这个函数
代码示例:略
3,线程池里面加回调函数:
1 import time 2 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 3 4 def func(n): 5 time.sleep(2) 6 print(n) 7 return n*n 8 9 def call_back(m): 10 print('结果是%s'%m.result(0)) 11 12 #max_workers 指定线程池多大 13 #1,创建线程池 14 tpool = ThreadPoolExecutor(max_workers=5) #默认 不要超过cpu个数*5 15 for i in range(20): 16 t = tpool.submit(func,i).add_done_callback(call_back)
运行结果: