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

Posted

技术标签:

【中文标题】什么是 event_loop_policy,为什么在 python asyncio 中需要它?【英文标题】:What is event_loop_policy and why is it needed in python asyncio? 【发布时间】:2018-02-04 03:19:18 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

事件循环策略是一个对象that is used,用于创建、设置或获取事件循环。例如,当您调用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

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

【讨论】:

以上是关于什么是 event_loop_policy,为什么在 python asyncio 中需要它?的主要内容,如果未能解决你的问题,请参考以下文章

什么是PP,PE.什么是均聚..什么是共聚..什么是嵌段..什么是无规,什么是注塑。什么是吹膜..什

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是抢占/什么是可抢占内核?到底有什么好处呢?

什么是950电话,它能干什么?

什么是密钥哈希?为什么需要它?它是唯一的吗?为什么 Facebook 集成需要它

什么是拉电流,什么是灌电流?什么是吸收电流 ?