进程池与线程池
进程池,线程池
#1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异步调用 Both implement the same interface, which is defined by the abstract Executor class. #2 基本方法 #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) 回调函数 # done() 判断某一个线程是否完成 # cancle() 取消某个任务
import os,time from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def task(n): print('%s is runing' %os.getpid()) time.sleep(1) return n**2 def callback_func(): pass if __name__ == "__main__": executor=ThreadPoolExecutor(max_workers=5) # 开5个线程
# executor=ProcessPoolExecutor(max_workers=5) # 开5个进程
futures=[] for i in range(11): future=executor.submit(task,i) # threading.Thread(target=task, args=(i,)) # future=executor.submit(task,i).add_done_callback(callback_func) 执行回调函数 futures.append(future) print('waiting...!') executor.shutdown() # close()+join()
浙公网安备 33010602011771号