我只是为了练习而实现greenlet API。
from greenlet import greenlet
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
这是我凌乱的代码
def test1():
tmp1=yield
print 12
try:
gv2.send(1)
except StopIteration:
pass
tmp1=yield
print 34
def test2():
tmp2=yield
print 56
try:
gv2.send(1)
except StopIteration:
pass
tmp1=yield
print 78
gv1=test1()
gv1.next()
gv2=test2()
gv2.next()
gv1.send(1)
显示,
12
56
Traceback (most recent call last):
File "prog.py", line 26, in <module>
gv1.send(1)
File "prog.py", line 5, in test1
gv2.send(1)
File "prog.py", line 15, in test2
gv2.send(1)
ValueError: generator already executing
所以,我不知道我猜对了,
但看起来在test1发送'1'到test2之后,它仍然有一些东西,
与 gevent 不同,不会发生控制流切换。test1 仍然有流量。
如果不是,我不明白 greenlet 可以做什么,但 python“协程”不存在。
我的问题是
- 是python协程(基于产量)是真实的东西(与其他人比较......lisp,ruby,&c)
- 如果是的话,请您提供一些意大利面条代码的提示吗?