2.3.4.通用代码
官方文档:https://docs.python.org/3/library/concurrent.futures.html
上次说到了 ,这次讲的这个就是基于 再结合 的一个通用实现:(上节回顾:
并发编程~协程演变过程
)
这个是Python3.2开始有 模块,我们主要使用就2个类: 和 (本质上是对 和 进行了高级别的抽象,方便我们实现异步调用)
1.基础案例
通过使用以及看源码发现:传参和之前稍微有点不同
先看个简单的引入例子:(用法和Java一样)
输出:(可以通过查看任务是否执行完成)
可以指定线程|进程数,不指定默认是:
线程:cpu核数的5倍
进程:cpu核数
源码看下就懂了:
2.批量任务( )
来个批量请求的案例:
输出:
PS:如果需要URL,可以这样搞:
输出:(取得时候 )
3.批量任务( )
上面的代码用map可以快速实现:(灵活性比 稍微差点,合适场景下倒是挺方便)
输出:(性能比 高点)
这种方式如果也想要获取到 ,可以借助 :
进程池的说明
和线程池用法一致,就换个名字而已( ):
输出:
流程图解说
官方给的系统执行流程:
引用一下官方分析:
会创建多个 对象,每个对象都传入了新创建的一个 对象
把每个 对象然后放进一个叫做 的 中,键是不同的
创建一个管理 队列的线程它能做2件事:
从 队列中获取 通过 找到对应的 如果这个 被取消了,就从 里面把它删掉,否则重新打包成一个 放入 队列中,而 的那些进程会从队列中取 执行,并把结果封装成 放入 队列中
从 队列中获取 ,然后从 更新对应的 对象并删掉入口
有了我们前面讲的知识,你再读 模块真的很轻松,大家有空可以去看看
对象
简单看下 对象:
:尝试去取消调用。如果调用当前正在执行,不能被取消( )
成功返回True,失败返回False
:如果调用被成功取消返回True
:如果当前是否正在执行
:执行成功|被取消后
:拿到调用返回的结果( )
:捕获程序执行过程中的异常
:将fn绑定到future对象上。当future对象被取消或完成运行时,fn函数将会被调用
和 案例:
输出:
说明
知识点其实就这么多了,其他的后面结合协程会继续说的,然后还有一个 的用法简单说说:
输出:( 默认是等待全部完成)
指定等待的参数:
输出:(返回值是 和 组成的元组)
and
来个案例:
输出:
有这几种常见的异常:
写在最后的话:线程现在虽然说了很多东西,其实等讲到了协程后,线程就基本上不太用了,基本上都是
用线程和进程的话基本上也是用最后说的通用方法,而什么时候用线程和进程这就看是否耗CPU(eg: )
领取专属 10元无门槛券
私享最新 技术干货