asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。asyncio的异步操作,需要在coroutine中通过yield from完成。
event loop 对象包含两个部分:event 和 loop。event 负责 I/O 事件通知而 loop 负责循环处理 I/O 通知并在就绪时调用回调。这里 event 的含义与 select 中的 event mask 类似。
协程可以处理IO密集型程序的效率问题,但是处理CPU密集型不是它的长处,如要充分发挥CPU利用率可以结合多进程+协程。
先分析一个例子:
import asyncio
@asyncio.coroutine
def wget(host):
connect = asyncio.open_connection(host, 80)
reader, writer = yield from connect
header = 'GET / HTTP/1.0\r\nHost: %s\r\n\r\n' % host
writer.write(header.encode('utf-8'))
yield from writer.drain()
while True:
line = yield from reader.readline()
if line == b'\r\n':
break
print('%s header > %s' %(host, line.decode('utf-8').rstrip())) #rstrip() 删除 string 字符串末尾的

本文介绍了Python 3.4引入的asyncio库,用于支持异步IO操作。asyncio基于事件循环(event loop)处理I/O事件,并通过协程(coroutine)实现异步操作。文中通过示例说明了如何使用@asyncio.coroutine和yield from创建并运行协程,强调了在大量数据写入时使用drain的重要性。此外,文章还提到了Python 3.5引入的async和await新语法,简化了协程的编写方式。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



