Python 3.x 异步函数中受控无限递归有害吗?
因此,我显然知道无限循环是不好的,可能会导致堆栈溢出,但在下面的例子中,我使用异步函数来获取下一个日期,并将函数休眠到我希望它执行的时间。这意味着它每天只运行一次,确切地说是在上午12点,并且会一直睡到第二天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
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领域之外的思考,你可能需要考虑。