Python协程
协程简介
协程,即协作式程序,又称微线程、纤程,英文名Coroutine。
其思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态。协程可以在运行期间的某个点上暂停执行,并在恢复运行时从暂停的点上继续执行。
协程已经被证明是一种非常有用的程序组件,不仅被python、lua、ruby等脚本语言广泛采用,而且被新一代面向多核的编程语言如golang rust-lang等采用作为并发的基本单位。
协程可以被认为是一种用户空间线程,与传统的线程相比,有2个主要的优点:
- 与线程不同,协程是自己主动让出CPU,并交付他期望的下一个协程运行,而不是在任何时候都有可能被系统调度打断。因此协程的使用更加清晰易懂,并且多数情况下不需要锁机制。
- 与线程相比,协程的切换由程序控制,发生在用户空间而非内核空间,因此切换的代价非常小。
总结起来是一句话:协程可以认为是一种用户态线程,与系统提供的线程不同点是,它需要主动让出CPU时间,而不是由系统进行调度,即控制权在程序员手上。
Python协程史
- Python 2.2 中的生成器让代码执行过程可以暂停 (yield)
- Python 2.5 中可以将值返回给暂停的生成器,这使得 Python 中协程的概念成为可能 (send)
- Python 3.3 中的 yield from,使得重构生成器与将它们串联起来都很简单 (yield from)
- Python 3.4 以后通过标准库 asyncio 获得了事件循环的特性 (asyncio)
- Python 3.5 使用async/await语法引入对协程的显式支持 (async/await)
- Python 3.6 增强asyncio,支持异步生成器、异步解析式
浅析Python元类及应用
写这篇文章的缘由
前几天去一家公司面试,面试的岗位是Python后台开发,面试中被问到了一道题,考虑很久想不到答案,顾回来查阅资料在此总结一下。
题目的描述是这样的:
通过阅读SQLAlchemy源码得知,其内部实现是使用元类编程来完成的,元类编程是Python的一种高级黑暗魔法,经常听其大名,并没有进入深入了解,借此机会稍微总结一下。
元编程
元编程我个人理解是:用代码生成(操纵)代码的编程手法。
Python中元编程的几种手段:
- 预定义方法
- 函数赋值
- descriptor
- eval
- 元类
上面的几种方式相对于元类来说简单一些,这里暂时先不讲了,以后有时间再去补充
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
|
|
More info: Writing