初学,理解不深,翻译不够好见谅。
事件环规则:通用的事件环get,set方法
现有的平台或编程框架会改变默认规则以满足平台或框架用户的需要。比如平台或框架必须将他们的规则用文件证明并且在设置他们自定义规则的初始序列时提供文件证明,为了避免在复杂的框架复写默认规则时出现不确定的行为。
获得当前上下文的事件环,使用get_event_loop()。它返回一个实现了下面指定的接口的事件环对象,或者抛出异常防止当前上下文没有设定事件环以及当前规则没有被指定去生成一个事件环。它不应该返回None。
为当前上下文设定事件环,使用set_event_loop(event_loop),event_loop是一个事件环对象,也就是一个AbstractEventLoop的实例化对象,或者None。允许设定当前事件环为None,但之后get_event_loop()时会抛出异常。这对测试代码不依赖一个存在的事件环是有用的。
我们期望get_event_loop()返回一个依赖于上下文(事实上,上下文定义也是这样)的特殊的事件环。它将创建一个新的事件环对象如果设置了None,同时创建是被规定所允许的。。默认规则会在主线程中创建一个新的事件环(就像在threading.py中定义的,它使用一个专为主线程设计的特殊的子类),只有get_event_loop()在set_event_loop()前被调用时。其他规则会有不同的表现。默认规则创造的事件环很懒,也就是说,如果需要的话第一次调用get_event_loop()创建一个事件环示例,并且使用当前规则说明。
得益于单元测试和其他特殊情况,于是出现了一个第三方规则函数:new_event_loop(),它创造并且按照规则的默认约束返回一个新的事件环对象。想要实现这样的事件环,你必须用set_event_loop()召唤它。
若要改变事件环规则,召唤set_event_loop_policy(policy),参数policy是一个事件环规则或者None。如果是空,规则对象必须是定义方法get_event_loop()的AbstractEventLoopPolicy的一个实例,set_event_loop(loop) and new_event_loop(),所有行为都要像上面这样声明。
向一个规则传递空值将恢复事件环规则为默认(平台或框架重新定义默认设置)。默认事件环规则是 DefaultEventLoopPolicy类的一个实例。当前的事件环规则对象会在召唤get_event_loop_policy()时被恢复。
TBD: decribe child watchers and UNIX quirks for subprocess processing.