Python并发之异步I/O(async,await)-1
- UID
- 1066743
|
Python并发之异步I/O(async,await)-1
Python并发之异步I/O(async,await)
背景
Python有很长一段的异步编程历史,特别是twisted,gevent和一些无堆栈的Python项目。
异步编程因为一些好的原因在这些年来越来越受关注。尽管相对于传统的线性风格更难一点,但是却是值得的:因为异步编程有更高的效率。
举个例子:在Http请求方面,Python异步协程可以提交请求然后去做队列中其他等待的任务,让它慢慢请求,而不是传统的一直等它请求到完成为止,这样的话会浪费更多的时间与资源。总之异步编程能让你的代码在处于等待资源状态时处理其他任务。
在Python3.4中,asyncio产生了。而在Python3.5中,有加入了对async def 和await新的语法支持,让我们看一看它们怎么工作的。
协程
在Python中,一个异步的函数我们通常叫它协程。之前我们在讲解yield的时候也已经讲过yield语法在协程中的基本使用了,这次同样是协程,但却是不同的语法。
#在Python 3.4中, 创建一个协程我们用asyncio.coroutine装饰器:
async def double(x):
return x * 2
# 这是个协程对象
>>> double(6)
>>><coroutine object double at 0x115b59d58>
# 既然是协程,我们像之前yield协程那样,预激活一下(注意这里用next(double(6)预激活会报错)
>>> double(6).send(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration: 12
# 好像差不多。
或者是这样的:
async def ping_server(ip):
# ping code here...
# 用await语法代替"yield from"
async def ping_local():
return await ping_server('192.168.1.1')
建议使用Python3.5最新主流语法:async def ,await |
|
|
|
|
|