线程池属性
concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor :线程池,提供异步调用
ProcessPoolExecutor :进程池,提供异步调用
基本方法:
submit(fn,*args,**kwargs)
异步提交任务。map(func,*iterables,timeout = None,chunksize = 1)
取代for
循环submit
操作。shutdown(wait = True)
相当于进程池pool.close()
+pool.join()
操作。
wait = True
时,等待池内所有任务执行玩毕回收玩资源后才继续。
wait = False
时,立即返回,并不会等待池内的任务执行完毕。
但不管wait
参数为何值,整个程序都会等到所有的任务执行完毕。
submit
和map
必须在shutdown
之前。- result(timeout = None) 取得结果
- add_done_callback(fn) 回调函数
例子:
-
submit
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) tpool = ThreadPoolExecutor(max_workers = 5) #个数一般起不超过cpu个数*5个 for i in range(20): tpool.submit(func,i) print('主线程')
-
shutdown
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) tpool = ThreadPoolExecutor(max_workers = 5) #个数一般起不超过cpu个数*5个 for i in range(20): tpool.submit(func,i) tpool.shutdown() #相当于执行close()和join() print('主线程')
-
result
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) return n * n tpool = ThreadPoolExecutor(max_workers=5) # 个数一般起不超过cpu个数*5个 t_list = [] for i in range(20): t = tpool.submit(func, i) t_list.append(t) tpool.shutdown() # 相当于执行close()和join() print('主线程') for t in t_list: print('****', t.result())
-
map
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) return n * n tpool = ThreadPoolExecutor(max_workers=5) # 个数一般起不超过cpu个数*5个 tpool.map(func,range(20)) #拿不到返回值
-
callback
import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) return n * n def call_back(m): print('结果是%s' % m.result()) tpool = ThreadPoolExecutor(max_workers=5) # 个数一般起不超过cpu个数*5个 for i in range(20): tpool.submit(func,i).add_done_callback(call_back)