Python--day41--线程池--python标准模块concurrent.futures

时间:2022-07-19 17:32:26

Python--day41--线程池--python标准模块concurrent.futures

Python--day41--线程池--python标准模块concurrent.futures

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())

运行结果:

Python--day41--线程池--python标准模块concurrent.futures

Python--day41--线程池--python标准模块concurrent.futures

2,tpool.shutdown() #close+join  如果没有shutdowm()函数,将出现边进入列表边打印现象,根据需求选择要不要这个函数

代码示例:略

3,线程池里面加回调函数:

 import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def func(n):
time.sleep(2)
print(n)
return n*n def call_back(m):
print('结果是%s'%m.result(0)) #max_workers 指定线程池多大
#1,创建线程池
tpool = ThreadPoolExecutor(max_workers=5) #默认 不要超过cpu个数*5
for i in range(20):
t = tpool.submit(func,i).add_done_callback(call_back)

运行结果:

Python--day41--线程池--python标准模块concurrent.futures