python asyncio run_forever 或 while True 类似,但这是一个“我应该这样做......”的问题。
我更想了解Python
asyncio
的内部结构是否基本上是一个
while True:
...
time.sleep(1)
(或更准确地说...
while not stopped:
循环。
它是否也使用
sleep
来防止旋转等待?
检查源代码?如果你使用 IPython,这非常简单:
>>> import asyncio
>>> loop = asyncio.get_event_loop()
>>> loop.run_forever??
循环的核心(在我的 3.11 安装中)是:
while True:
self._run_once()
if self._stopping:
break
所以是的,这是一个
while True:
循环。你可以检查loop._run_once??
来查看源代码,它更更复杂,但简短的版本是它不是睡眠,它是一个select
调用,它会阻塞,直到某个异步任务完成,将其自身添加到队列,并向事件循环发出信号,表明有工作要做。