簡體   English   中英

如何在后台運行異步協程?

[英]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_taskrun_forever但那些也凍結了線程。

我從 JavaScript 來到這里,所以我希望第一個代碼在“后台”運行協程,因為據我所知,這就是async的目的。 我想使用線程不是一種選擇,因為那是我試圖避免使用async的原因。

經過一些研究后,我對 asyncio 基礎知識有了一定的了解。 原來你不能同時擁有異步和同步代碼,因為全局同步代碼會阻塞異步流,而不是在全局線程中你必須運行 asyncio.run(main_func()) 而在 main_func 中你應該編寫 create_task 或 gather,這取決於結果和合作的需要。 所以,沒有等待意味着沒有異步。 等待給其他功能執行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM