首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 协程 future 回调

python 协程 future 回调

作者头像
用户5760343
发布于 2022-01-09 01:16:12
发布于 2022-01-09 01:16:12
8440
举报
文章被收录于专栏:sktjsktj

cancel(): 取消future的执行,调度回调函数 result(): 返回future代表的结果 exception(): 返回future中的Exception add_done_callback(fn): 添加一个回调函数,当future执行的时候会调用这个回调函数 remove_done_callback(fn): 从“call whten done”列表中移除所有callback的实例 set_result(result): 将future标为执行完成,并且设置result的值 set_exception(exception): 将future标为执行完成,并设置Exception

-- coding: utf-8 --

""" Asyncio.Futures - Chapter 4 Asynchronous Programming """ import asyncio import sys

@asyncio.coroutine def first_coroutine(future, N): """前n个数的和""" count = 0 for i in range(1, N + 1): count = count + i yield from asyncio.sleep(4) future.set_result("first coroutine (sum of N integers) result = " + str(count))

@asyncio.coroutine def second_coroutine(future, N): count = 1 for i in range(2, N + 1): count *= i yield from asyncio.sleep(3) future.set_result("second coroutine (factorial) result = " + str(count))

def got_result(future): print(future.result())

if name == "main": N1 = int(sys.argv[1]) N2 = int(sys.argv[2]) loop = asyncio.get_event_loop() future1 = asyncio.Future() future2 = asyncio.Future() tasks = [ first_coroutine(future1, N1), second_coroutine(future2, N2)] future1.add_done_callback(got_result) future2.add_done_callback(got_result) loop.run_until_complete(asyncio.wait(tasks)) loop.close()

输出

python asy.py 2 2 first coroutine (sum of N integers) result = 3 second coroutine (factorial) result = 2

python asy.py 4 4 first coroutine (sum of N integers) result = 10 second coroutine (factorial) result = 24

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python-高级协程编程-协程间的通信和数据传输(三)
Future 是一种可以在协程间进行通信和数据传输的对象。它代表一个异步操作的结果,协程可以等待 Future 对象的结果,从而实现协程间的通信和数据传输。
玖叁叁
2023/04/22
5280
python asyncio 协程futures结果回调(并行编程 29)
import asyncio,sys @asyncio.coroutine def f(fu,n): count=0 for i in range(1,n+1): count=count+i yield from asyncio.sleep(4) fu.set_result("first coroute"+str(count)) @asyncio.coroutine def s(fu,n): count=1 for i in range(2,n+1): count*=i yield from asyncio.sleep(4) fu.set_result("second coroute"+str(count)) def got_result(fu): print(fu.result()) if name=="main": n1=10 n2=10 loop=asyncio.get_event_loop() fu1=asyncio.Future() fu2=asyncio.Future() tasks=[ f(fu1,n1), s(fu2,n2)] fu1.add_done_callback(got_result) fu2.add_done_callback(got_result) loop.run_until_complete(asyncio.wait(tasks)) loop.close()
用户5760343
2019/07/30
9090
python asyncio coroutine协程的并发 task(并行编程 28)
import asyncio @asyncio.coroutine def fa(num): f=1 for i in range(2,num+1): print("Asyncio.Task:Computer factories({})".format(i)) yield from asyncio.sleep(1) f=i print("Asyncio.Task - factorial({}) ={}".format(num,f)) @asyncio.coroutine def fi(num): a,b=0,1 for i in range(2, num + 1): print("Asyncio.Task:Computer fibonacci({})".format(i)) yield from asyncio.sleep(1) a,b=b,a+b print("Asyncio.Task - fibonacci({}) ={}".format(num, a)) @asyncio.coroutine def bi(n,k): result=1 for i in range(1,k+1): result=result(n-i+1)/i print("Asyncio.Task:Computer binomialcoeff({})".format(i)) yield from asyncio.sleep(1) print("Asyncio.Task - binomialcoeff({},{}) ={}".format(n,k,result)) if name=="main": tasks=[asyncio.Task(fa(10)),asyncio.Task(fi(10)),asyncio.Task(bi(20,10))] loop=asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks)) loop.close()
用户5760343
2019/07/30
6080
Python asyncio之协程学习总结
协程(Coroutine)一种电脑程序组件,该程序组件通过允许暂停和恢复任务,为非抢占式多任务生成子程序。协程也可以简单理解为协作的程序,通过协同多任务处理实现并发的函数的变种(一种可以支持中断的函数)。
授客
2023/05/29
1.1K0
Python asyncio之协程学习总结
学习一下Python3的协程
Python3推出好久了,其中的协程特性,一直没有时间来学习,这次跟着官方文档一起了解一下。
点点寒彬
2020/09/11
4970
快学学Python异步IO轻松管理10k+并发连接
异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异。软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览器,服务端比如node.js。本文主要分析Python异步IO。 Python 3.4标准库有一个新模块asyncio,用来支持异步IO,不过目前API状态是provisional,意味着不保证向后兼容性,甚至可能从标准库中移除(可能性极低)。如果关注PEP和Python-Dev会发现该模块酝酿了很长时间,可能后续有
小小科
2018/05/04
7640
快学学Python异步IO轻松管理10k+并发连接
11 | Tornado源码分析:Gen 对象(下)
我们先看一下源码(我已经进行过整理的源码,主要方面大家去理解里面的实现逻辑,若想看完整的源码建议大家可以自行查看本机安装的 tornado 版本中的源代码),在源码中我做了一些批注,这样有利于大家更好的去结合代码来深入了解 其内部的运作。
python编程从入门到实践
2020/09/09
4590
用 uWSGI 来跑 asyncio
最近关注的有点杂,所以也挺久没更新博客了。这一篇主要讨论这些技术:WSGI、py3k、werkzeug、asyncio、uWSGI、nginx。
py3study
2020/01/03
1.4K0
深入理解Python异步编程
对于其他的并发模型大多数采取的都是线性的方式编写。并且依赖于语言运行时系统或操作系统的底层线程或进程来适当地改变上下文,而基于asyncio的应用要求应用代码显示的处理上下文切换。 asyncio提供的框架以事件循环(event loop)为中心,程序开启一个无限的循环,程序会把一些函数注册到事件循环上。当满足事件发生的时候,调用相应的协程函数。
sergiojune
2019/05/07
2.5K0
Tornado 源码阅读:初步认识
来源:国夫君 segmentfault.com/a/1190000002971992 ioloop `ioloop`是`tornado`的核心模块,也是个调度模块,各种异步事件都是由他调度的,所以必须弄清他的执行逻辑 源码分析 而`ioloop`的核心部分则是 `while True`这个循环内部的逻辑,贴上他的代码下 def start(self): if self._running: raise RuntimeError("IOLoop is already running") self.
小小科
2018/05/03
5930
Tornado 源码阅读:初步认识
python多任务—协程(一)
写在前面: 花了一周的时间,对协程做了一个简单的梳理,特别是异步编程asyncio库的使用,做了详细的说明。本文主要包括的知识点有:yield生成器的复习并实现协程的功能、greenlet库实现协程、gevent库实现协程、asyncio异步协程的介绍、异步协程的创建与运行、任务的创建与运行、并发运行gather/wait/as_complete/wait_for等方法的实现、异步协程的嵌套、await关键字的理解等等,这些都是基础。由于篇幅比较长,打算分为两篇,第二篇在介绍一下asyncio的其他用法。
全栈程序员站长
2022/09/14
1.7K0
Python 高并发之基 协程(上篇)
在Python 中有进程、线程、还有协程。为何大家都推崇多用协程呢?其最主要的一点是:协程是用户级线程,其调度、切换在用户态 而 线程、进程 属于操作系统级别的调度 涉及到调度、上下文的切换 需要用户态与内核态进行切换 想比较 协程是消耗资源最少的。 不知你有没有这样的经历,明明我使用了多线程 ,线程数也有好多 但是执行下来发现 多线程执行的效率还比串行的差,那问题出在哪里呢?最主要的还是cpu 主要消耗在上下文切换上了。
python编程从入门到实践
2020/06/14
1.6K0
Python 高并发之基 协程(上篇)
python asyncio coroutine协程(并行编程 27)
import asyncio import datetime import time from random import randint
用户5760343
2019/07/30
4700
Python异步编程之 协程 & asyncio & 异步
协程 实现协程的方法: greenlet 早期模块 yield关键字 asyncio装饰器(python3.4加入) async、await关键字(python3.5加入)推荐使用 asyncio的使用 在python3.4及之后加入内置模块 import asyncio @asyncio.coroutine def func1(): print('函数func1') yield asyncio.sleep(5) print('函数func1完成') @asyncio.cor
GhostCN_Z
2020/09/04
7230
Python | 详解Python中的协程,为什么说它的底层是生成器?
我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下。协程又称为是微线程,英文名是Coroutine。它和线程一样可以调度,但是不同的是线程的启动和调度需要通过操作系统来处理。并且线程的启动和销毁需要涉及一些操作系统的变量申请和销毁处理,需要的时间比较长。而协程呢,它的调度和销毁都是程序自己来控制的,因此它更加轻量级也更加灵活。
TechFlow-承志
2020/08/11
8090
Python | 详解Python中的协程,为什么说它的底层是生成器?
tornado 的协程调度原理
菜皮日记
2023/12/18
2230
python并发2:使用asyncio处理并发
asyncio 是Python3.4 之后引入的标准库的,这个包使用事件循环驱动的协程实现并发。asyncio 包在引入标准库之前代号 “Tulip”(郁金香),所以在网上搜索资料时,会经常看到这种花的名字。
goodspeed
2020/12/25
2.6K0
爬虫性能相关
根据文章内容撰写摘要总结。
coders
2018/01/04
6390
Python协程与异步编程超全总结
协程:又称为微线程,在一个线程中执行,执行函数时可以随时中断,由程序(用户)自身控制,执行效率极高,与多线程比较,没有切换线程的开销和多线程锁机制。
Python编程与实战
2021/02/12
2K0
Python协程与异步编程超全总结
python 事件驱动 asyncio
1 Asyncio loop = get_event_loop(): 得到当前上下文的事件循环。 loop.call_later(time_delay, callback, argument): 延后 time_delay 秒再执行 callback 方法。 loop.call_soon(callback, argument): 尽可能快调用 callback, call_soon() 函数结束,主线程回到事件循环之后就会马上调用 callback 。 loop.time(): 以float类型返回当前时间循环的内部时间。 asyncio.set_event_loop(): 为当前上下文设置事件循环。 asyncio.new_event_loop(): 根据此策略创建一个新的时间循环并返回。 loop.run_forever(): 在调用 stop() 之前将一直运行。
用户5760343
2022/01/09
6820
推荐阅读
相关推荐
python-高级协程编程-协程间的通信和数据传输(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档