先开好线程/进程, 等有任务之后就可以直接使用这个池中的数据
开好的线程/进程会一直存在于这个池中, 可以被多个任务反复利用, 从而能够减少开启 关闭 调度线程/进程的时间开销
池中线程/进程的个数控制操作系统需要调度任务的个数, 控制池中的单位, 这样有利于提高提高操作系统的效率, 减轻操作系统的负担
from concurrent.futures import ThreadPoolExecutor
from threading import current_thread
import time
def func(n):
print(n, current_thread().ident, ‘start‘)
time.sleep(1)
print(n, current_thread().ident, ‘end‘)
return n*n
def print_fun(res):
print(res.result())
if __name__ == ‘__main__‘:
# 创建线程池
tp = ThreadPoolExecutor(4)
for i in range(20): # 异步非阻塞
# 提交任务到线程池
ret = tp.submit(func, i) # Future未来对象
# 回调函数, 异步阻塞, 给ret对象绑定一个回调函数, 等待ret对应的任务完成之后立即调用print_fun函数
# 实现对结果的立即处理, 不用按照顺序接受处理
ret.add_done_callback(print_fun)
原文:https://www.cnblogs.com/KX-Lau/p/13576775.html