又要来求助了,关于协程的问题
import asyncioimport 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 这个错误是因为你没有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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-18 19:28
这个错误是因为你没有await协程对象,导致协程函数fun1、fun2和fun3没有被执行。要修复这个问题,你需要在 ...
我试了你的代码,同样不能运行,错误一样!应该不是这个! 曲折 发表于 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-18 22:26
非常抱歉,我看到了你的问题。是因为在创建协程对象之后,没有将它们添加到任务列表中去。以下是修改后 ...
还是不对哦,我已经因为我给g1 g2 g3分别赋值了FUN1等程序,所以你所说的问题不存在!问题依旧 曲折 发表于 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]