鱼C论坛

 找回密码
 立即注册
查看: 2076|回复: 0

[技术交流] 关于协程的task任务和gather问题,跪求大神降临!!

[复制链接]
发表于 2021-3-7 12:23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决,现在用协程异步执行有3个方法了。
1.直接用task封装协程,然后调用执行。
2.可以不用task封装,直接用gather并发执行。
3.可以用task封装后,再用gather并发执行。
我懵逼了, 这3种到底有啥不一样啊,  一般建议使用哪种方式呢,  为什么呢?
案例如下:

import asyncio
import time
async def ceshi01(x,y):
    await asyncio.sleep(y)
    print(f"我是{x},我运行了{y}分钟")

async def yunxing():
    # await asyncio.gather(ceshi01('A',2),ceshi01('b',3),ceshi01('c',4))   #可以不用task封装,就能直接异步执行。
    await asyncio.create_task(ceshi01('A',2))   #直接用task封装了, 也能异步执行。
    await asyncio.create_task(ceshi01('b',4))

print(asyncio.run(yunxing()))


那下面的,先用task封装一下,然后再用gather执行,  这到底有啥区别啊。 我的天啊。 求助啊!!
import asyncio
import time
async def ceshi01(x,y):

    await asyncio.sleep(y)
    print(f"我是{x},我运行了{y}分钟")

async def yunxing():
    start = time.perf_counter()

    task = asyncio.create_task(ceshi01('b',3))  # 也可以像这样用task封装,
    task1 = asyncio.create_task(ceshi01('c',4))
    await asyncio.gather(task,task1)    #再用gather 来执行的情况,  
    print(time.perf_counter() - start)

asyncio.run(yunxing())

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表