asyncio call_later 立即运行回调
asyncio call_later runs callback without delay
我正在尝试使用 asyncio 每 5 秒无限地 运行 一个特定函数。
我将 call_later
放在函数本身中,以便在 5 秒后将函数安排为 运行,
但是 call_later
保持 运行 函数没有任何延迟并导致 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)
我正在尝试使用 asyncio 每 5 秒无限地 运行 一个特定函数。
我将 call_later
放在函数本身中,以便在 5 秒后将函数安排为 运行,
但是 call_later
保持 运行 函数没有任何延迟并导致 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)