在python开发期间,由于GIL的原因,不能直接采用并行的方式处理代码逻辑。在multiprocessing库的支持下,python程序能够启动子进程执行特定的任务,但子进程的管理也成为了问题。为了简化用户开发成本,python在concurrent.futures下内置了ProcessPoolExecutor这一数据结构,实现了简单的进程管理及任务调度。如果没有特别的需求,开发者只需要用ProcessPoolExecutor即可实现并行执行任务。因此,本文简单对ProcessPoolExecutor的实现进行分析,帮助大家更加了解python开发中进程/任务调度的一种方式。
首先来看ProcessPoolExecutor的用法,可以参考官方文档
- constructor:构造器
- max_workers:最大worker数量
- context:进程启动方式,比如spawn、fork等。可以参考这篇文章
- initializer:初始化环境用的回调/钩子,会在传进去的任务执行之前调用(比如要import什么库,读取什么配置之类)
- initargs:初始化回调的参数
- submit:提交特定任务,返回一个future实例(类似于js的promise)
- map:批量submit
- shutdown:关闭进程池并销毁资源
可以看到用法非常简单,用户一侧只需要这样操作即可得到任务执行结果: