Python 3.2版本之后发布了concurrent.futures模块,用以支持和管理并发编程,内容涵盖了进程和线程池(Thread and Process Pooling)、非确定性执行流(Nondeterministic Execution Flows)以及进程和线程同步。
本文通过将带有可选参数的任务提交(Submit)给执行器(Executor)来实例化futures对象。执行器是线程或者进程执行池访问的父类,线程或者进程实例的使用比较耗费资源,因此需要尽可能的重复利用资源,提升整体性能。为此Python提供了concurrent.futures模块实现池(Pooling)的概念,并提供了如下的类:concurrent.futures.Executor- 用于异步执行调用;
Submit(function, argument) - 调度一个函数的执行
map(function, argument) - 异步方式执行函数
shutdown(Wait = True) - 通知执行器(Executor)释放资源
concurrent.futures.Future - 封装了回调函数的异步执行
如何处理线程或者进程池
线程或进程池(也称为池)表示用于优化和简化程序中线程和/或进程资源管理的软件管理器。通过池化,可以向池中提交要执行的任务。池配备了一个挂起任务的内部队列,以及执行这些任务的多个线程或进程。池中一个重要的概念是重用。线程或进程在其生命周期中多次用于不同的任务。它减少了创建和提高利用池的程序性能的开销。
Executor的子类
重用是致程序员使用池的主要原因之一。concurrent.futures模块提供了executor类的两个子类,它们分别异步操作线程池和进程池。这两个子类如下所示:concurrent.future