什么是 event_loop_policy 以及为什么在 python asyncio 中需要它?

San*_*Kim 6 python event-loop python-asyncio

事件循环文档中提到event_loop_policy,但没有描述它是什么,为什么需要将详细介绍这个抽象层。(文档甚至说可以自定义这一层)。

另外,help(asyncio.get_event_loop_policy())只是说...

带有子进程观察器的 UNIX 事件循环策略。

然后,我就更糊涂了。什么是watcher?什么是child processesevent loop

Mik*_*mov 6

事件循环策略是一个用于创建、设置或获取事件循环的对象。例如,当您调用asyncio.new_event_loop()它时,策略将确定具体返回的事件循环的类。

如果您出于某种原因想要更改默认事件循环类型,则需要策略。将在单独的可替换(方便)策略对象中创建循环的逻辑封装是一种策略编程模式

help(asyncio.get_event_loop_policy())为您提供操作系统中使用的具体策略的文档,在您的情况下为_UnixDefaultEventLoopPolicy

通过链接,您可以看到那里的事情如何实现的,找到什么是观察者并阅读它的文档

 class SafeChildWatcher(BaseChildWatcher):
    """'Safe' child watcher implementation.

    This implementation avoids disrupting other code spawning processes by
    polling explicitly each process in the SIGCHLD handler instead of calling
    os.waitpid(-1).

    This is a safe solution but it has a significant overhead when handling a
    big number of children (O(n) each time SIGCHLD is raised)
    """
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它是非常低级的、特定于操作系统的东西,你通常不需要它来使用asyncio.

我认为只有当您要编写事件循环和/或管理它们的策略时,才可能需要调查策略。