BoBuo 发表于 2022-3-4 23:52

Python实例记录----异步(协程的实现)

接上篇帖子:https://www.52pojie.cn/thread-1596989-1-1.html
'''
在前面的代码中,我们用一个网络请求作为例子,这本身就是一个耗时的等待操作,因为
在请求网页之后需要等待页面响应并返回结果。耗时等待操作一般都是IO操作,例如文件读取、
网络请求等。协程在处理这种操作时是有很大优势的,当遇到需要等待的情况时,程序可以暂时挂起,
转而执行其他操作,从而避免因一直等待一个程序儿耗费过多的时间,能够充分利用资源

要实现异步,需要了解await关键字的用法,它可以将耗时等待的操作挂起,让出控制权。
如果协程在执行的时候遇到await,事件循环就会将本协程挂起,转而执行别的协程,直到
其他协程挂起或执行完毕。
await后的对象必须是如下格式之一:
    一个原生协程对象
    一个由type。coroutine修饰的生成器,这个生成器可以反回协程对象
    由一个包含__await__方法的对象返回的迭代器

requests返回的对象不能和await一起使用。只有使用支持异步请求操作的请求方式才可以实现真正的异步,aiohttp
'''import asyncioimport aiohttp
import time

start = time.time()

async def get(url):
    session = aiohttp.ClientSession()
    response = await session.get(url)# 利用aiohttp库里ClientSession类的get方法进行请求。
    await response.text()
    await session.close()
    return response

async def request():
    url = 'http://www.httpbin.org/delay/5'
    print('Waiting for',url)
    respones = await get(url)
    print('Get response from',url,'response',respones)

tasks =
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

end = time.time()
print('Cost time:',end - start)

出入平安 发表于 2022-3-5 01:12

感谢楼主,学习一下

deffedyy 发表于 2022-3-5 10:47


感谢楼主,学习一下

coldgrace 发表于 2023-10-16 00:22

Thanks a lot a for sharing.
页: [1]
查看完整版本: Python实例记录----异步(协程的实现)