Python异步开发-concurrent

concurrent

两个类

1. Future 类
  • cancel():尝试去取消调用。如果调用当前正在执行,不能被取消。这个方法将返回False,否则调用将会被取消,方法将返回True

  • cancelled():如果调用被成功取消返回True

  • running():如果当前正在被执行不能被取消返回True

  • done():如果调用被成功取消或者完成running返回True

  • result(Timeout = None):拿到调用返回的结果。如果没有执行完毕就会去等待 ; asyncio模块的result方法不支持设定时间

  • exception(timeout=None):返回由调用引发的异常。如果调用还没完成那么这个方法将等待 timeout 秒。如果在 timeout 秒内没有执行完成,concurrent.futures.TimeoutError 将会被触发。timeout 可以是整数或浮点数。如果 timeout 没有指定或为 None,那么等待时间就没有限制。如果 futrue 在完成前被取消则 CancelledError 将被触发。如果调用正常完成那么返回 None。

  • add_done_callback(fn):将fn绑定到future对象上。当future对象被取消或完成运行时,fn函数将会被调用

2. Executor 类(抽象类不直接使用,一般使用他的派生类 futures.ThreadPoolExecutor、 futures.ProcessPoolExecutor)
  • Executor.submit(fn, *args, kwargs):函数fn(*args **kwargs)返回一个Future对象代表调用的执行。
  • Executor.map(func, *iterables, timeout=None, chunksize=1) :类似于map,返回一个迭代器,迭代器的__next__方法调用各个future的result方法,得到各个future的结果。
  • shutdown(wait=True):给executor发信号,使其释放资源,当futures完成执行时。已经shutdown再调用submit()或map()会抛出RuntimeError。使用with语句,就可以避免必须调用本函数。

两个模块函数

1. as_completed
  • 用途: as_completed 在线程使用中,传入一个futures类列表,会返回一个futures类的迭代器,通过迭代该迭代器可以获得已完成的futures (流畅的python中说的是该函数返回一个迭代器,在future运行结束后产出future);
  • 注意: 用途类似map,但是生产中一般用 submit + as_completed 来代替map, 因为 map结果输出是依赖输入参数的,而 as_completed 则是一个 yield生成器返回,完成一个返回一个不会造成代码阻塞
2. wait
  • 用途: 输出future 列表元素 完成和未完成情况
  • 输出的结果包含:
ConstantDescription
FIRST_COMPLETED当任何future 完成或取消或者线程函数执行完成时
FIRST_EXCEPTION当future通过引发异常而结束时,线程函数将返回。如果没有future引发异常,那么它相当于所有已完成的。
ALL_COMPLETED当所有future完成或取消时,函数将返回。

以上是 包包含的所有要点,接下来以一个实例说明应用

pass
参考: 官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值