亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于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 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號