簡體   English   中英

asyncio call_later 無延遲地運行回調

[英]asyncio call_later runs callback without delay

我正在嘗試使用 asyncio 每 5 秒無限運行一次特定的 function。
我將call_later放在 function 本身中,以便安排 function 在 5 秒后運行,
但是call_later會毫無延遲地繼續運行 function 並導致RecursionError: maximum recursion depth exceeded while calling a Python object

我應該如何解決這個問題?

代碼:

def run(count: int, loop: asyncio.AbstractEventLoop):
    print(f"run {count}")
    loop.call_later(5, run(count + 1, loop))

loop = asyncio.new_event_loop()
run(0, loop)

# output:
# run 0
# run 1
# ...
# run 995
# RecursionError
# 
# All these outputs are printed within a second

提前致謝。

有兩個問題。 首先,當你寫

loop.call_later(5, run(count + 1, loop))

您將運行的結果作為參數傳遞。 那行應該是:

loop.call_later(5, run, count + 1, loop)

此外,不要像run(0, loop)那樣直接啟動它,而是安排它在循環中運行;

loop.call_soon(run, 0, loop)

暫無
暫無

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

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