Skip to content

LonglyCode/asynchronous-in-python

Repository files navigation

python 中的协程和异步


  1. 函数加了yield关键字就变成了生成器。
  2. 生成器是在上生成的,而我们普通的函数运行都是在栈上运行的,frame(栈帧)都是链表一样是相互有联系的,而生成器的frame是在堆上,完全自由,可以随便暂停开始,像云一样自由来去。
  3. 通过gen.gi_frame.f_locals来获取生成器的内部变量值。
  4. next(),send()用来启动生成器,在每个yield关键字处暂停并返回。此外还有throw()方法向生成器内部抛出错误。
  5. 当生成器内部有这样的表达式时left = yield right,永远记得等号右边的right是生成器返回的的值,而等号左边的left接收send(value)的值,但不返回。
  6. 协程是基于生成器这种可由程序员进行开始暂停结束的特点,主要是用到了send特性,可以将外部的数据传入到生成器的内部进行异步处理。python3.4之后把抽象的协程概念具体化了,变成语言特性的一种,通过装饰普通的生成器函数就成为协程。
  7. 异步是指把事件抛出去,让它在一边玩,等到它完成了给个信号个主进程或者主线程通知事件完成了,然后运行相关的回调函数。
  8. 事件循环就是一个调度异步事件的框架。
  9. 两个关键,Future用来保存未来异步结果,而且执行相应的回调;Task驱动器,将需要驱动的生成器封装在内部,内部维护一个run方法用于不断向前驱动当前封装的生成器,值得注意的是这个run会被注册到Future回调方法里面,当异步结果发生并在保存结果的时,继续完成内部封装那个生成器。

About

All about asynchronous knowledge in python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages