从入门到富豪 发表于 2021-3-7 12:23:37

关于协程的task任务和gather问题,跪求大神降临!!


【求助帖】请及时确认最佳答案,下次提问时可以得到更多关注,问题可以更快解决,现在用协程异步执行有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())

页: [1]
查看完整版本: 关于协程的task任务和gather问题,跪求大神降临!!