aiohttp/asyncio 小例子和解释

#!/usr/bin/env python  
# encoding: utf-8  
import aiohttp
import asyncio
import time
# 通过async def定义的函数是原生的协程对象
async  def fetch_async():
    conn=aiohttp.TCPConnector(verify_ssl=Flase)
    async with aiohttp.ClientSession(connector=conn) as session:
        async with session.get("http://www.baidu.com") as r:
           data=await r.text()   #和request的区别requests的方法是text,await就是协同的执行那些同步的任务,直到完成。
        return data[:10]


start=time.time()
#每个线程有一个事件循环,主线程调用asyncio.get_event_loop时会创建事件循环
event_loop=asyncio.get_event_loop()
tasks=[fetch_async() for i in range(10)]
#run_until_complete方法,事件循环会安排协同程序的执行,asyncio.gather可以按顺序搜集异步任务执行的结果,
results=event_loop.run_until_complete(asyncio.gather(*tasks))

if __name__ == '__main__':
        for num,result in zip(list(range(10)),results):
            print(f'fetch({num}) = {result}')

  

posted @ 2018-05-23 16:49  公众号python学习开发  阅读(302)  评论(0编辑  收藏  举报