[英]How to run an asyncio coroutine in background?
我有一個 aiogram 調度程序實例。 它的 async function start_polling()
旨在不斷請求 Telegram API 服務器進行更新。 我認為這並不重要,因為在我看來,以下內容適用於所有協程。 我想在后台運行協程,這樣我就可以在線程中做其他事情。
dispatcher.start_polling()
這會拋出 'coroutine never awaited' 的錯誤asyncio.get_event_loop().run_until_complete(dp.start_polling())
這會占用線程
我也試過create_task
和run_forever
但那些也凍結了線程。
我從 JavaScript 來到這里,所以我希望第一個代碼在“后台”運行協程,因為據我所知,這就是async
的目的。 我想使用線程不是一種選擇,因為那是我試圖避免使用async
的原因。
經過一些研究后,我對 asyncio 基礎知識有了一定的了解。 原來你不能同時擁有異步和同步代碼,因為全局同步代碼會阻塞異步流,而不是在全局線程中你必須運行 asyncio.run(main_func()) 而在 main_func 中你應該編寫 create_task 或 gather,這取決於結果和合作的需要。 所以,沒有等待意味着沒有異步。 等待給其他功能執行時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.