最近在学习python3 的 asyncio, 特将学习笔记记录于此.
先来个简单的例子:
import asyncio
def hello_world(loop):
print('Hello World')
loop.stop()
loop = asyncio.get_event_loop()
# Schedule a call to hello_world()
loop.call_soon(hello_world, loop)
# Blocking call interrupted by loop.stop()
loop.run_forever()
loop.close()
可以看到先是通过
asyncio.get_event_loop()
得到事件循环,而这是 selector_events.BaseSelectorEventLoop 、base_events.BaseEventLoop 的一个实例.。之后调用 call_soon以达到立即执行的目的,这个 call_soon来自base_events.BaseEventLoop ,实际的是抛给了 events.Handle,生成了一个 Handle的实例,实际执行是 Handle._run, 但是在实例 Handle后并没有立即调用_run,而是将生成的 Handle 实例添加到了 base_events.BaseEventLoop. _ready 中,直到调用
loop.run_forever()
才开始执行, 那么这个 loop.run_forever() 做了啥?
def run_forever(self):
"""Run until stop() is called."""
self._check_closed()