[英]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.