asyncio 是Python3.4引入的标准库,直接内置了对异步IO的支持。
asyncio 的编程模型是一个事件循环,从 asyncio 模块中获取一个 EventLoop 的引用,然后把需要执行的协程扔到 EventLoop 中执行,就实现了异步IO。
当处理流出现IO阻塞时,线程并不会等待IO操作执行完,而是去EventLoop中执行下一个协程。
示例:
-
import asyncio
-
import time
-
import threading
-
import sys
-
-
# 1号协程
-
@asyncio.coroutine
-
def hello():
-
print('hstart...',time.time(), threading.currentThread)
-
sys.stdout.flush()
-
yield from asyncio.sleep(2)
-
print('hover',time.time())
-
sys.stdout.flush()
-
-
-
# 2号协程
-
@asyncio.coroutine
-
def bey():
-
print('bstart……' , time.time(), threading.currentThread)
-
sys.stdout.flush()
-
yield from asyncio.sleep(3)
-
print('bover',time.time())
-
sys.stdout.flush()
-
-
-
# 定义一个eventloop,可以理解为事件池,用于存放 协程
-
loop = asyncio.get_event_loop()
-
-
# 当只有一个协程时, 直接加入即可。
-
# loop.run_until_complete(hello())
-
-
-
# 当有多个协程时, 要先将多个协程组成一个会话列表 tasks。
-
# 将 asyncio.wait(tasks) 作为参数传给run_until_complete()
-
tasks = [hello(), bey()]
-
loop.run_until_complete(asyncio.wait(tasks))
-
-
# 关闭
-
loop.close()
阅读(1246) | 评论(0) | 转发(0) |