python之asyncio
asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。
asnycio是用来编写并发代码的库,python3.5以后使用async/await语法。
asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。
asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。
asyncio 提供一组 高层级 API 用于:
- 并发地 运行 Python 协程 并对其执行过程实现完全控制;
- 执行 网络 IO 和 IPC;
- 控制 子进程;
- 通过 队列 实现分布式任务;
- 同步 并发代码;
此外,还有一些 低层级 API 以支持 库和框架的开发者 实现:
- 创建和管理 事件循环,以提供异步 API 用于
网络化, 运行子进程,处理OS 信号等等; - 使用 transports 实现高效率协议;
- 通过 async/await 语法 桥接 基于回调的库和代码。
利用asyncio实现hello world协程
python3.4
import asyncio @asyncio.coroutine
def hello():
print("Hello!---")
# 异步调用asyncio.sleep(1):
r = yield from asyncio.sleep(1)
print("---World!") # 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()
@asyncio.coroutine会把一个generator(生成器)标记为coroutine(协程)类型,然后我们就把这个coroutine扔到eventloop(事件循环)中去。
hello()首先会打印出'Hello!----',然后yeild from语法可以让我们更方便的调用另一个generator。由于asyncio.sleep(1)也是一个coroutine,所有线程不会等待asyncio,.sleep(1),而是直接中断并执行下一个消息循环了。当asyncio返回时,线程就可以从yield from拿到返回值(此处是None)并执行下一句语句。
把asyncio看作是一个耗时1s的I/O操作,在此期间主线程并未等待,而是去执行event_loop中其他可以执行的coroutine了,因此可以实现并发执行。
python 3.5
用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。
为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法async和await,可以让coroutine的代码更简洁易读。
请注意,async和await是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:
- 把
@asyncio.coroutine替换为async; - 把
yield from替换为await。
那么上述代码可以简化为:
import asyncio async def hello():
print("Hello!---")
# 异步调用asyncio.sleep(1):
await asyncio.sleep(1)
print("---World!") # 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()
python 3.7
新增了asyncio.run() api来执行异步函数
上述代码可以改为:
import asyncio async def hello():
print("Hello!---")
# 异步调用asyncio.sleep(1):
await asyncio.sleep(1)
print("---World!") asyncio.run(hello())
python之asyncio的更多相关文章
- 我实在不懂Python的Asyncio
原语 事件循环(Event Loop) Awaitables和Coroutines Coroutine Wrappers Awaitables and Futures Tasks Handles Ex ...
- python:利用asyncio进行快速抓取
web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...
- Python 和 Asyncio 编写在线多人游戏(一)
在技术和文化领域,大规模多人在线游戏(MMO)毋庸置疑是我们当今世界的潮流之一.很长时间以来,写一个 MMO 游戏这件事总是会涉及到大量的预算与复杂的底层编程技术.不过在最近这几年,事情迅速发生了变化 ...
- [Python 多线程] asyncio (十六)
asyncio 该模块是3.4版本加入的新功能. 先来看一个例子: def a(): for x in range(3): print('a.x', x) def b(): for x in 'abc ...
- Python:asyncio模块学习
python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...
- Python使用asyncio+aiohttp异步爬取猫眼电影专业版
asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访 ...
- python:Asyncio模块处理“事件循环”中的异步进程和并发执行任务
python模块Asynico提供了管理事件.携程.任务和线程的功能已经编写并发代码的同步原语. 组成模块: 事件循,Asyncio 每个进程都有一个事件循环. 协程,子例程概念的泛化,可以暂停任务, ...
- Python之asyncio模块的使用
asyncio模块作用:构建协程并发应用的工具 python并发的三大内置模块,简单认识: .multiprocessing:多进程并发处理 .threading模块:多线程并发处理 .asyncio ...
- python之asyncio三种应用方法
1.直接使用asyncio.run方法2.同步的效果,用await调用函数3.创建任务(asyncio.create_task),并发运行任务(await asyncio.gather) import ...
随机推荐
- iOS.ObjC.__attribute__-directives
__attribute__ Directives Reference 1. __attribute__ directives in Objective-C (AAAA+) (Read Again) h ...
- pytest 一.安装和使用入门
pytest --fixtures Python版本: Python 2.7.3.4.3.5.3.6.Jython.PyPy-2.3 平台:Unix / Posix和windows PyPI包名称:p ...
- axios封装get方法和post方法
我们常用的ajax请求方法有get.post.put等方法,相信小伙伴都不会陌生.axios对应的也有很多类似的方法,不清楚的可以看下文档.但是为了简化我们的代码,我们还是要对其进行一个简单的封装.下 ...
- spring的compentScan注解扫描类机制
1主要通过ConfigurationClassParser类的doProcessConfigurationClass(ConfigurationClass configClass, SourceCla ...
- AX_Query
static void example(Args _args) { SysQueryRun queryRun = new SysQueryRun(querystr(KTL_Sale ...
- 浅谈如何获取机器的memory和CPU信息
最近做了一个项目,需要获取机器的CPU和memory的使用情况.花了一些时间网上搜索了一下,自己也做了些测试.总结下来,基本上2种方式:一种是用WMI(2种),另一种是用Performance cou ...
- java将pdf文件转为word
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.Output ...
- 字符串API练习三则
(1)按照Ascii码字典的顺序排列字符串.核心API:int compareTo(String),若大于则返回1,小于返回-1,等于返回0. class StringArray { static v ...
- C++数论板题(弹药科技):Lengendre定理和欧拉函数
弹药科技 时间限制: 1 Sec 内存限制: 128 MB 题目描述 经过精灵族全力抵挡,精灵终于坚持到了联络系统的重建,于是精灵向人类求助, 大魔法师伊扎洛决定弓}用博士的最新科技来抗敌. 伊扎洛: ...
- jenkins maven git windows code 自动部署
本人刚刚接触 写的不好就对付看看吧 哈哈哈O(∩_∩)O哈哈~ 最近看见别人弄得自动部署 自己也是手痒痒 也想弄一个 所以就弄了一个 windows的 我用的是https的 在网上看了很多都是 s ...