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

时间:2018-02-04 03:19:18

标签: python python-asyncio event-loop

event loops documentation提及event_loop_policy但没有描述它是什么以及为什么需要详细介绍这个抽象层。 (文档甚至说可以自定义这一层。)

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

  

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

然后,我变得更加困惑。什么是watcherchild processes中的event loop是什么?

1 个答案:

答案 0 :(得分:3)

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

如果由于某种原因想要更改默认事件循环类型,则需要策略。在单独的可替换(方便的)策略对象中创建循环的封装逻辑是strategy programming pattern

help(asyncio.get_event_loop_policy())为您提供了操作系统中使用的具体政策的文档,例如_UnixDefaultEventLoopPolicy

通过该链接,您可以看到在那里实施的内容,找到what watcher is并阅读docs

 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)
    """

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

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