协程定义
又称微线程,纤程。英文名Coroutine。轻量级的线程,用户可以控制调度切换任务。
协程使用的模块
greenlet
代码示例
from greenlet
import greenlet
def eat(name):
print(
'%s eat1' % name)
g2.switch(
'quincy')
print(
'%s eat2' % name)
g2.switch()
def play(name):
print(
'%s play1' % name)
g1.switch()
print(
'%s play2' % name)
g1 = greenlet(eat)
g2 = greenlet(play)
g1.switch(
'quincy')
Gevent
代码示例
from gevent
import monkey;
import gevent, time
monkey.patch_all()
def eat(name):
print(
'%s eat1' % name)
time.sleep(
2)
print(
'%s eat2' % name)
return 1
def play(name):
print(
'%s play1' % name)
time.sleep(
3)
print(
'%s play2' % name)
return 2
g1 = gevent.spawn(eat,
'quincy')
g2 = gevent.spawn(play,
'quincy')
gevent.joinall([g1, g2])
print(
'主')
print(g1.value)
print(g2.value)
代码讲解
主要用到gevent.spawn提交任务,用monkey去检测代码执行过程中是否有I/O,如果有则进行功能直接的切换,进而尽可能减少I/O阻塞。如果函数有返回值,可以直接g.value获取。用spawn提交任务后调用join方法。