tasks.py
类/函数 方法 对象 作用 描述Task 继承自Future,主要用于整个协程运行的周期
__init__ 初始化对象 self._coro ,并且call_soon将self.__step加入self._ready队列
self._coro 用户定义的函数主体
__step Task类的核心函数
__wakeup 唤醒任务 新增
ensure_future 如果对象是一个Future对象,就返回,否则就会调用create_task返回,并且加入到_ready队列
futures.py
类/函数 方法 对象 作用 描述Future 主要负责与用户函数进行交互
__init__ 初始化两个重要对象 self._loop 与 self._callbacks
self._loop 事件循环
self._callbacks 回调队列,任务暂存队列,等待时机成熟(状态不是PENDING),就会进入_ready队列
add_done_callback 添加任务回调函数,状态_PENDING,就虎进入_callbacks队列,否则进入_ready队列
set_result 获取任务执行结果并存储至_result,将状态置位_FINISH,调用__schedule_callbacks
__schedule_callbacks 将回调函数放入_ready,等待执行
result 获取返回值
__await__ 使用await就会进入这个方法 新增
__iter__ 使用yield from就会进入这个方法 新增
3)执行过程
3.1)入口函数
main.py
if __name__ == "__main__": ret = wilsonasyncio.run(helloworld()) print(ret)ret = wilsonasyncio.run(helloworld())使用run,参数是用户函数helloworld(),进入run,run的流程可以参考上一小节
run --> run_until_complete
3.2)事件循环启动,同之前
3.3)第一次循环run_forever --> run_once
将_ready队列的内容(即:task.__step)取出来执行,这里的coro是helloworld()
def __step(self, exc=None): coro = self._coro try: if exc is None: result = coro.send(None) else: result = coro.throw(exc) except StopIteration as exc: super().set_result(exc.value) else: blocking = getattr(result, '_asyncio_future_blocking', None) if blocking: result._asyncio_future_blocking = False result.add_done_callback(self.__wakeup, result) finally: self = None__step较之前的代码有改动