为了账号安全,请及时绑定邮箱和手机立即绑定

关于python代码中async和await的问题

关于python代码中async和await的问题

叮当猫咪 2023-10-26 15:16:29
我不知道如何使用 aync/await。假设我有这个功能:async def test():    result = get_db_data() # to get records from db    return result所以,这里的get_data不是一个异步函数,当我调用test()时,我使用await test()。但我的问题是,代码被认为是异步的,还是我也应该制作 get_data 和 async func 并用 wait 调用它?请我需要帮助注意:我尝试在测试函数中添加await asyncio.sleep(30),并且同时测试了2个请求,所以看起来它正在工作,因为它在30秒后返回了两个结果(所以不需要60秒)秒)
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

背景

这是一个小例子,希望能帮助你理解。说这是你的功能

async def test(): 
   # does something

现在,我们为什么要使其异步?比如说,我们必须在另一个线程方法中使用它。

async def threaded_f():
            result = await test() 
                       # Some random code to get variable Y
            Y = Y + result

现在,使 test() 异步的优点是,在 result = test() 行,线程将等待 test() 的结果,因为它的返回值稍后将在代码中使用。如果它是 void 类型的函数,我们可能不会等待调用并让线程函数继续执行。

回答

那么,回答你的问题。是的,您可以使 get_db_data() 异步并等待,因为它与 threaded_f 函数中讨论的情况相同。结果需要存储在变量中。


查看完整回答
反对 回复 2023-10-26
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

在回答您的问题时, get_db_data 不会仅仅因为它位于异步测试协程内部而被视为异步。

您需要了解事件循环协程才能很好地回答您的问题。

如果您的同步例程没有阻塞,那么您可以摆脱它,但您需要彻底了解它在做什么,以确保它不会导致意外的延迟。如果您不希望您的程序被 get_db_data 阻止,那么您需要使其可等待,例如协程。


查看完整回答
反对 回复 2023-10-26
  • 2 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信