python 中的协程是怎么实现多任务的?

Python017

python 中的协程是怎么实现多任务的?,第1张

协程也称为微线程,是在一个线程中,通过不断的切换任务函数实现了多任务的效果。

协程在python实现的原理主要是通过yield这个关键字实现

但是真正在开发时,可以不需要自己实现,可以通过很多成熟的第三方模块来实现协程,比如greenlet,gevent等模块。多线程的课程我记得是在黑马程序员里面找的,一套,还有资料。

Python 2.x 的 generator 的实现方式是 Lua 5.1 coroutine 在涉及 Lua/C mixed code 时候的 yield 方式。所以在 Lua 5.1 的时候是不能 yield-from-C 的。不过 Lua 从一开始就可以 resume-from-C,这是因为 Lua 借用了 C runtime stack 作为 coroutine 的 scheduler(具体细节参见《Lua 5.0 Implementation》)。

从 Lua 5.2 开始,在 Lua C API 里引入了用显示声明 continuation function 的方式来实现 yield-from-C。

Python 3.x 的 generator 借鉴了 Lua 5.2 的 yield-from-C 形式,可以有限的保留调用栈上下文。

所以 Python 3.x 的纯 Python code coroutine 水平才相当于 Lua 5.2 的 Lua/C mixed code coroutine。Python 2.x 的 coroutine 和 Lua 的 coroutine 实现相差更远。

如果你在只有 ANSI C compiler 的平台上做 script/C hybrid 开发,Lua coroutine 是唯一的选择了。

11_lxml/01_线程池的基本使用.py:

11_lxml/02_异步.py:

11_多任务异步协程/03_多任务异步.py:

11_多任务异步协程/04_flask服务.py:

11_多任务异步协程/04_多任务异步协程.py:

11_多任务异步协程/05_aiohttp实现.py:(需与11_多任务异步协程/05_aiohttp实现.py连用)

文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

Editor:Lonelyroots