event_loop_policy 是什么,为什么在 python asyncio 中需要它?
What is event_loop_policy and why is it needed in python asyncio?
event loops documentation 提到了 event_loop_policy
但没有详细描述它是什么以及为什么需要这个抽象层。
(文档甚至说可以自定义这一层)。
另外,help(asyncio.get_event_loop_policy())
就是说...
UNIX event loop policy with a watcher for child processes.
然后,我就更糊涂了。什么是 watcher
? event loop
中的child processes
是什么?
事件循环策略是一个对象that is used,用于创建、设置或获取事件循环。例如,当您调用 asyncio.new_event_loop()
时,策略将决定具体返回的事件循环的 class.
如果您出于某种原因想要更改默认事件循环类型,则需要策略。在单独的可替换(方便)策略对象中封装创建循环的逻辑是 strategy programming pattern.
help(asyncio.get_event_loop_policy())
为您提供 OS 中使用的具体政策的文档,在您的情况下 _UnixDefaultEventLoopPolicy.
通过 link 你可以看到那里是如何实现的,找到 what watcher is and read it's 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)
"""
如您所见,它是非常低级的、OS 特定的东西,您通常不需要它来使用 asyncio
。
我认为只有当您要编写管理它们的事件循环 and/or 策略时,您才可能需要研究策略。
event loops documentation 提到了 event_loop_policy
但没有详细描述它是什么以及为什么需要这个抽象层。
(文档甚至说可以自定义这一层)。
另外,help(asyncio.get_event_loop_policy())
就是说...
UNIX event loop policy with a watcher for child processes.
然后,我就更糊涂了。什么是 watcher
? event loop
中的child processes
是什么?
事件循环策略是一个对象that is used,用于创建、设置或获取事件循环。例如,当您调用 asyncio.new_event_loop()
时,策略将决定具体返回的事件循环的 class.
如果您出于某种原因想要更改默认事件循环类型,则需要策略。在单独的可替换(方便)策略对象中封装创建循环的逻辑是 strategy programming pattern.
help(asyncio.get_event_loop_policy())
为您提供 OS 中使用的具体政策的文档,在您的情况下 _UnixDefaultEventLoopPolicy.
通过 link 你可以看到那里是如何实现的,找到 what watcher is and read it's 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)
"""
如您所见,它是非常低级的、OS 特定的东西,您通常不需要它来使用 asyncio
。
我认为只有当您要编写管理它们的事件循环 and/or 策略时,您才可能需要研究策略。