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