我有一個 aiogram 調度程式實體。它的異步功能start_polling()旨在不斷請求 Telegram API 服務器進行更新。我認為這并不重要,因為以下內容 imo 適用于所有協程。我想在后臺運行協程,這樣我就可以在執行緒中做其他事情。
dispatcher.start_polling()這會引發“協程從未等待”的錯誤
asyncio.get_event_loop().run_until_complete(dp.start_polling())這需要執行緒
我也嘗試過create_task,run_forever但那些也凍結了執行緒。
我是從 JavaScript 來到這里的,所以我希望第一個代碼在“后臺”運行協程,因為這async就是我所理解的。我想使用執行緒不是一種選擇,因為這是我試圖避免使用async.
uj5u.com熱心網友回復:
經過一些研究后,我對 asyncio 基礎知識有了了解。事實證明你不能同時擁有異步和同步代碼,因為全域同步代碼會阻塞異步流,而不是在全域執行緒中你必須運行 asyncio.run(main_func()) 而在 main_func 中你應該撰寫 create_task 或收集,具體取決于結果的需要和合作的需要。所以,沒有等待意味著沒有異步。等待為其他功能的執行提供時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494482.html
