Wed 18 May 2016
Greenlet: 轻量级并发编程
动机 greenlet这个包拆分自Stackless。Stackless是一个CPython的版本,实现并支持一种叫做tasklets的微线程。Tasklets会以一种伪并发的方式运行(通常运行在单个或者一些系统级的线程中),它们之间通过channels来同步数据。 一个greenlet,从另一方面来说,依然是一种很原始的没有隐式调度的微线程。换句话说,就是协程(coroutine)。这在你想要完全控制代码的运行时是非常有用的。你可以在greenlet之上构建采用自定义调度方式的微线程。然而,使用greenlet来制作先进的控制流结构是很有用的。举个例子,我们可以重新创造生成器。和Python自带的生成器所不同的是,我们的生成器可以调用网状的方法,而且这些网状的方法也可以yield出值。(另外,你不需要再使用yield这个关键词了) 举例 我们来思考一个程序,用户可以在一个类终端控制台中输入命令来控制该程序。假设命令是一个字符一个字符的输入。在这样一个系统中,通常会存在如下一个循环: def process_commands(*args): while True: line = '' while not line.endswith('\n'): line += read_next_char() if line == 'quit\n': print ... read more