线程池-The End

mac2022-06-30  102

线程池-The End

线程池介绍

线程池是一个全新的模块-- 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

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)