Python 3.x 异步函数中受控无限递归有害吗?

Python 3.x 异步函数中受控无限递归有害吗?,python-3.x,asynchronous,recursion,async-await,Python 3.x,Asynchronous,Recursion,Async Await,因此,我显然知道无限循环是不好的,可能会导致堆栈溢出,但在下面的例子中,我使用异步函数来获取下一个日期,并将函数休眠到我希望它执行的时间。这意味着它每天只运行一次,确切地说是在上午12点,并且会一直睡到第二天 async def foo(): sleep_until = await get_time() # gets time until 12am tomorrow await asyncio.sleep(sleep_until) # execute whatever my ta

因此,我显然知道无限循环是不好的,可能会导致堆栈溢出,但在下面的例子中,我使用异步函数来获取下一个日期,并将函数休眠到我希望它执行的时间。这意味着它每天只运行一次,确切地说是在上午12点,并且会一直睡到第二天

async def foo():
  sleep_until = await get_time()  # gets time until 12am tomorrow
  await asyncio.sleep(sleep_until)

  # execute whatever my task is here

  await foo()
虽然它执行得很好,工作正常,但作为一个新手程序员,我还有一些问题没有回答

  • 这段代码会导致内存泄漏吗
  • 上一次迭代是否结束?或者它会一直存在直到程序崩溃或停止

  • 您可以使用一个简单的程序和一个短的睡眠计时器自己测试这一点,它确实会导致堆栈溢出-

    #bug.py
    从异步IO导入运行,睡眠
    从日期时间导入日期时间
    异步def foo():
    打印(datetime.now())
    等待睡眠(.0001)
    wait foo()#递归导致溢出
    运行(foo())
    
    在这种情况下,明显的修复方法是使用
    while
    而不是递归-

    #fix.py
    从异步IO导入运行,睡眠
    从日期时间导入日期时间
    永久异步定义(func,延迟):
    尽管如此:
    等待函数()
    等待睡眠(延迟)
    异步def foo():
    打印(datetime.now())
    运行(永远(foo.0001))#无溢出
    

    或Python领域之外的思考,你可能需要考虑。