Asyncio协程的使用详解

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Asyncio协程的使用详解

爬虫中使用的最多的就是协程了,协程的使用确实比较难理解,但是总归就在写代码,通过代码自己实践比几千字的解释更有用

asyncio.sleep(delay, result=None, *, loop=None)

sleep()总是挂起当前任务,允许运行其他任务。自3.8版起已弃用,将在3.10版中删除:循环参数。

通过协程的方式请求百度:

import aiohttp
import asyncio
import ssl
async def fetch(session,url):
    async with session.get(url,ssl=ssl.SSLContext()) as response:
        return await response.text()
async def main():
    async with aiohttp.ClientSession() as session:
        html=await fetch(session,'https://baidu.com')
        print(html)
        
loop=asyncio.get_event_loop()#定义事件循环
loop.run_until_complete(main())#直到main()函数执行完毕,事件循环结束

通过过gather方法

import asyncio
async def a(t):
    print('-->',t)
    await asyncio.sleep(0.5)
    print('<--',t)
    return t*10
def main():
    futs=[a(t) for t in range(4)]
    print(futs)
    ret=asyncio.gather(*futs) #参数前必须加*
    print(ret)
    loop=asyncio.get_event_loop()
    ret1=loop.run_until_complete(ret)
    print(ret1)
main()

通过create_task()方法

使用高级asyncio.create_task()函数创建任务,或使用低级loop.create_task()函数或确保_future()函数。不鼓励手动实例化任务。

#通过create_task()方法
import asyncio
async def a(t):
    print('-->',t)
    await asyncio.sleep(0.5)
    print('<--',t)
    return t*10
async def b():
    cou=0
    while 1: #死循环
        cou+=1
        cor=a(cou) #cou传入函数a中
        resp=loop.create_task(cor)#创建任务
        await asyncio.sleep(0.5)
        #print(resp)
loop=asyncio.get_event_loop()#定义事件循环
loop.run_until_complete(b())#直到函数b执行完毕,事件循环结束

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Asyncio协程的使用详解》 发布于2020-02-28

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

7 + 4 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册