并发的核心思想在于,大的任务可以分解成一系列的子任务,后者可以被调度成同时执行或者异步执行,而不是一次一个地或者同步地执行。两个子任务之间的切换也就是上下文的切换。
在gevent里面,上下文切换是通过yielding来完成的,在下面的例子里,我们有两个上下文,通过调用gevent.sleep(0),他们各自yield向对方。
import gevent
def foo():
print ("Running in foo")
gevent.sleep(0)
print("Implicit context switch back to foo again")
def bar():
print ("Explicit context to bar")
gevent.sleep(0)
print("Implicit context switch back to bar")
gevent.joinall([
gevent.spawn(foo),
gevent.spawn(bar),
])
运行结果:
Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar