曲折 发表于 2024-3-18 19:28:39

又要来求助了,关于协程的问题

import asyncio
import time

async def fun1():
    print("我是沈腾")
    time.sleep(3)
    print("我是沈腾")

async def fun2():
    print("我是张含韵")
    time.sleep(2)
    print("我是张含韵")

async def fun3():
    print("我是张涵予")
    time.sleep(4)
    print("我是张涵予")

if __name__ == '__main__':
    g1 = fun1()
    g2 = fun2()
    g3 = fun3()
    task = #把所有任务装到一个列表里
    t1 = time.time()
    asyncio.run(asyncio.wait(task))
    t2 = time.time()
    print(f"共耗费{t2-t1}秒")



运行了,错误是
sys:1: RuntimeWarning: coroutine 'fun1' was never awaited
sys:1: RuntimeWarning: coroutine 'fun2' was never awaited
sys:1: RuntimeWarning: coroutine 'fun3' was never awaited

FishC 发表于 2024-3-18 19:28:57

这个错误是因为你没有await协程对象,导致协程函数fun1、fun2和fun3没有被执行。要修复这个问题,你需要在创建协程对象时使用await关键字。

以下是修改后的代码:

import asyncio
import time

async def fun1():
    print("我是沈腾")
    await asyncio.sleep(3)
    print("我是沈腾")

async def fun2():
    print("我是张含韵")
    await asyncio.sleep(2)
    print("我是张含韵")

async def fun3():
    print("我是张涵予")
    await asyncio.sleep(4)
    print("我是张涵予")

if __name__ == '__main__':
    g1 = fun1()
    g2 = fun2()
    g3 = fun3()
    task = # 把所有任务装到一个列表里
    t1 = time.time()
    asyncio.run(asyncio.wait(task))
    t2 = time.time()
    print(f"共耗费{t2-t1}秒")

在上面的代码中,我们使用了await关键字来等待协程函数fun1、fun2和fun3的运行结果。使用asyncio.sleep替代了time.sleep,以保证不会阻塞事件循环。最后,使用asyncio.run来运行异步任务,并使用asyncio.wait来等待所有任务完成。

希望这能帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

曲折 发表于 2024-3-18 22:26:14

FishC 发表于 2024-3-18 19:28
这个错误是因为你没有await协程对象,导致协程函数fun1、fun2和fun3没有被执行。要修复这个问题,你需要在 ...

我试了你的代码,同样不能运行,错误一样!应该不是这个!

FishC 发表于 2024-3-18 22:26:28

曲折 发表于 2024-03-18 22:26
我试了你的代码,同样不能运行,错误一样!应该不是这 ...

非常抱歉,我看到了你的问题。是因为在创建协程对象之后,没有将它们添加到任务列表中去。以下是修改后的代码:

import asyncio
import time

async def fun1():
    print("我是沈腾")
    await asyncio.sleep(3)
    print("我是沈腾")

async def fun2():
    print("我是张含韵")
    await asyncio.sleep(2)
    print("我是张含韵")

async def fun3():
    print("我是张涵予")
    await asyncio.sleep(4)
    print("我是张涵予")

if __name__ == '__main__':
    tasks =    # 将所有协程对象添加到任务列表中
    t1 = time.time()
    asyncio.run(asyncio.wait(tasks))
    t2 = time.time()
    print(f"共耗费{t2-t1}秒")

在上面的代码中,我们将fun1、fun2和fun3的调用结果添加到任务列表tasks中,然后使用asyncio.wait来等待所有任务完成。

希望这次能够解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

曲折 发表于 2024-3-18 22:45:50

FishC 发表于 2024-3-18 22:26
非常抱歉,我看到了你的问题。是因为在创建协程对象之后,没有将它们添加到任务列表中去。以下是修改后 ...

还是不对哦,我已经因为我给g1 g2 g3分别赋值了FUN1等程序,所以你所说的问题不存在!问题依旧

FishC 发表于 2024-3-18 22:46:09

曲折 发表于 2024-03-18 22:45
还是不对哦,我已经因为我给g1 g2 g3分别赋值了FUN1等 ...

非常抱歉,我犯了个错误。你是正确的,你在给g1、g2和g3赋值时已经调用了协程函数fun1、fun2和fun3,所以不需要再在任务列表中添加这些协程对象。请改用asyncio.gather来运行并等待所有协程任务完成。以下是修改后的代码:

import asyncio
import time

async def fun1():
    print("我是沈腾")
    await asyncio.sleep(3)
    print("我是沈腾")

async def fun2():
    print("我是张含韵")
    await asyncio.sleep(2)
    print("我是张含韵")

async def fun3():
    print("我是张涵予")
    await asyncio.sleep(4)
    print("我是张涵予")

if __name__ == '__main__':
    g1 = fun1()
    g2 = fun2()
    g3 = fun3()

    t1 = time.time()
    asyncio.run(asyncio.gather(g1, g2, g3))
    t2 = time.time()
    print(f"共耗费{t2-t1}秒")

这次我们使用asyncio.gather来同时运行并等待所有协程任务完成。希望这次能够解决问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 又要来求助了,关于协程的问题