在内部,asyncio run_forever() 基本上是一个 while True 循环吗?

问题描述 投票:0回答:1

python asyncio run_forever 或 while True 类似,但这是一个“我应该这样做......”的问题。

我更想了解Python

asyncio
的内部结构是否基本上是一个

while True:
  ...
  time.sleep(1)

(或更准确地说...

while not stopped:
循环。

它是否也使用

sleep
来防止旋转等待?

python python-asyncio
1个回答
0
投票

检查源代码?如果你使用 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
调用,它会阻塞,直到某个异步任务完成,将其自身添加到队列,并向事件循环发出信号,表明有工作要做。

© www.soinside.com 2019 - 2024. All rights reserved.