请问有没有大佬大佬知道为什么异步执行结果是这样?
本帖最后由 Elise7 于 2024-3-17 22:11 编辑执行到箭头那一步await挂起怎么就不执行后边儿的了,直接到程序最后一步就出去了,我是python 3.10。在网上实在是查不到原因了呜呜呜。。。。。。。。。好了好了,我终于发现了,我把session打成了sesssion。。终于看到了,程序正常啦 哈哈没问题,大佬我来帮你解答!异步执行的原理是基于事件循环的,它允许程序在等待某个任务完成的同时继续执行其他任务,提高了程序的效率。在Python中,我们可以使用`asyncio`模块来实现异步操作。
根据你的描述,你的代码可能是这样的:
import asyncio
async def async_func():
print("开始执行异步任务")
await asyncio.sleep(1)
print("异步任务执行完毕")
async def main():
print("主任务开始")
task = asyncio.create_task(async_func())
await task
print("主任务结束")
asyncio.run(main())
当遇到`await asyncio.sleep(1)`这一行时,程序会暂时挂起当前的协程,并将控制权转交给事件循环。然后,事件循环会等待1秒钟,再执行下一个任务,这里就是打印"异步任务执行完毕"。
但是要注意,`await`只能在`async`函数内部使用,而不能在普通的函数或全局作用域中使用。所以,确保你的`await`语句是在`async`函数内部使用的。
希望以上解释能帮助到你,如果还有其他问题,请随时提问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 21:02
哈哈没问题,大佬我来帮你解答!异步执行的原理是基于事件循环的,它允许程序在等待某个任务完成的同时继续 ...
不行,还是看不懂,我感觉怎么看都没问题{:5_107:} Elise7 发表于 2024-03-17 21:31
不行,还是看不懂,我感觉怎么看都没问题{:5_107:}
哈哈,没问题,我再尝试用更通俗易懂的方式解释给你听。
想象一下,你是一位厨师,在做一道复杂的菜。当你做一些需要等待的步骤时,比如煮面需要等待几分钟,你可以选择在等待的这段时间去做其他事情,而不是无聊地站在灶台前等待水开。
在编程中,异步执行就是类似的原理。当遇到一个耗时较长的操作时,比如从网上下载一个文件,为了不让程序陷入等待状态,我们可以选择将这个耗时操作放在后台执行,然后继续执行其他任务,等待它完成的同时,我们可以做其他事情。
使用`asyncio`模块可以实现异步操作,它提供了事件循环机制,让你的程序能够并发执行多个任务,提高效率。在使用`await`关键字时,它会暂时挂起当前任务,让出控制权给其他任务,等待这个耗时任务完成后再回来继续执行。
所以,当你的代码遇到`await`关键字时,它会暂停执行,跳转到其他任务(如果有的话),等待那些任务完成后再回来继续执行。
希望这个比喻能够帮助你理解异步执行的原理。如果还有疑问,请随时提问哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-3-17 21:31
哈哈,没问题,我再尝试用更通俗易懂的方式解释给你听。
想象一下,你是一位厨师,在做一道复杂的菜 ...
我重写一个sleep的可以异步,但是发帖的这个我真的看不懂会什么会弹出 Elise7 发表于 2024-03-17 22:01
我重写一个sleep的可以异步,但是发帖的这个我真的看 ...
当你使用`await asyncio.sleep(1)`时,它会让程序暂停执行1秒钟。在这个时间里,事件循环可以继续执行其他任务。而你看到的弹出可能是因为在等待的时候,其他任务完成了,导致事件循环继续执行这些任务,最终弹出了结果。下面是一个简单的示例代码,帮助你更好地理解异步执行的过程:import asyncioasync def async_sleep(): print("开始睡觉") await asyncio.sleep(1) print("睡醒了")async def main(): print("主任务开始") task = asyncio.create_task(async_sleep()) print("主任务进行中") await task print("主任务结束")asyncio.run(main())输出结果应该是:主任务开始主任务进行中开始睡觉(等待1秒)睡醒了主任务结束从输出结果可以看出,当遇到`await asyncio.sleep(1)`时,主任务暂停执行,切换到`async_sleep()`函数,并打印出"开始睡觉",然后等待1秒钟,再次切回到主任务,并打印出"睡醒了",最后打印出"主任务结束"。希望这个示例能够帮助你更好地理解异步执行的过程。如还有疑问,请随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]