版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myonelotus/article/details/85216745
Python 高级编程之 asyncio并发编程
1. asyncio 简介
1.1 协程与 asyncio
协程编写的三个组成部分:1. 事件循环, 2. 回调(驱动生成器), 3. epoll(IO 多路复用)
asyncio是python用于解决异步io编程的一整套解决方案。基于 asyncio 的框架有: tornado、gevent、twisted(scrapy, django channels)。
django channels 用于 HTTP 2.0 开发;torando(实现web服务器), django+flask(uwsgi, gunicorn+nginx);tornado可以直接部署, nginx+tornado
1.2 例子
import asyncio
import time
async def get_html(url):
print("start get url")
# 这里不能使用 time.sleep(2) 模拟 HTTP 请求,因为这是一个同步阻塞的方式
# 这个地方必须加 await
await asyncio.sleep(2)
print("end get url")
if __name__ == "__main__":
start_time = time.time()
loop = asyncio.get_event_loop()
tasks = [get_html("http://www.imooc.com") for i in range(10)]
loop.run_until_complete(asyncio.wait(tasks))
print(time.time()-start_time)