鱼C论坛

 找回密码
 立即注册
查看: 673|回复: 5

[已解决]请问有没有大佬大佬知道为什么异步执行结果是这样?

[复制链接]
发表于 2024-3-17 21:01:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Elise7 于 2024-3-17 22:11 编辑

执行到箭头那一步await挂起怎么就不执行后边儿的了,直接到程序最后一步就出去了,我是python 3.10。在网上实在是查不到原因了呜呜呜。。。。。。。。。好了好了,我终于发现了,我把session打成了sesssion。。终于看到了,程序正常啦
最佳答案
2024-3-17 21:02:08
哈哈没问题,大佬我来帮你解答!异步执行的原理是基于事件循环的,它允许程序在等待某个任务完成的同时继续执行其他任务,提高了程序的效率。在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 小助理,如未能正确解答您的问题,请继续追问。
屏幕截图 2024-03-17 205727.jpg
屏幕截图 2024-03-17 205756.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-17 21:02:08 | 显示全部楼层    本楼为最佳答案   
哈哈没问题,大佬我来帮你解答!异步执行的原理是基于事件循环的,它允许程序在等待某个任务完成的同时继续执行其他任务,提高了程序的效率。在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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-17 21:31:26 | 显示全部楼层
FishC 发表于 2024-3-17 21:02
哈哈没问题,大佬我来帮你解答!异步执行的原理是基于事件循环的,它允许程序在等待某个任务完成的同时继续 ...

不行,还是看不懂,我感觉怎么看都没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-17 21:31:49 | 显示全部楼层
Elise7 发表于 2024-03-17 21:31
不行,还是看不懂,我感觉怎么看都没问题


哈哈,没问题,我再尝试用更通俗易懂的方式解释给你听。

想象一下,你是一位厨师,在做一道复杂的菜。当你做一些需要等待的步骤时,比如煮面需要等待几分钟,你可以选择在等待的这段时间去做其他事情,而不是无聊地站在灶台前等待水开。

在编程中,异步执行就是类似的原理。当遇到一个耗时较长的操作时,比如从网上下载一个文件,为了不让程序陷入等待状态,我们可以选择将这个耗时操作放在后台执行,然后继续执行其他任务,等待它完成的同时,我们可以做其他事情。

使用`asyncio`模块可以实现异步操作,它提供了事件循环机制,让你的程序能够并发执行多个任务,提高效率。在使用`await`关键字时,它会暂时挂起当前任务,让出控制权给其他任务,等待这个耗时任务完成后再回来继续执行。

所以,当你的代码遇到`await`关键字时,它会暂停执行,跳转到其他任务(如果有的话),等待那些任务完成后再回来继续执行。

希望这个比喻能够帮助你理解异步执行的原理。如果还有疑问,请随时提问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-17 22:01:26 | 显示全部楼层
FishC 发表于 2024-3-17 21:31
哈哈,没问题,我再尝试用更通俗易懂的方式解释给你听。

想象一下,你是一位厨师,在做一道复杂的菜 ...

我重写一个sleep的可以异步,但是发帖的这个我真的看不懂会什么会弹出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-17 22:01:43 | 显示全部楼层
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 10:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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