并发编程:concurrent.futures 专栏

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: )

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181214G05O1A00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券