双木成林:喋喋不休

I leave no trace of wings in the air, but I am glad I have had my flight.

使用greenlet中一点简单心得

with one comment

想要对greenlet的switch机制进行测试,于是写了以下这段代码。


from greenlet import *

def test1(x, y):
    print 'in test1'
    z = gr2.switch(x+y)
    print z
    print 'out test1'

def test2(u):
    print 'in test2'
    print u
    gr1.switch(42)
    print 'out test1'

gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch("hello", " world")

运行结果:

in test1
in test2
hello world
42
out test1

从这个层面可以看出。greenlet的协程其实是一个切换机制。就是主动将自己的运行过程让给别的协程。切换需要有目标,并且可以在switch里面传入参数。如果是第一次运行,switch的参数就是作为协程的run的函数的参数传入。如果是运行中,就作为switch的返回值。
以上隐含的内容是,如果在运行中想要切换到别的协程去做事,那么不能保证那个协程一定会返回结果。
考虑在greenlet上面加上一个隐含回复机制。

Written by linluxiang

二月 16th, 2011 at 2:08 下午

Posted in Python,技术

Tagged with ,

One Response to '使用greenlet中一点简单心得'

Subscribe to comments with
Notice: 自 2.5 版本起,已不建议使用 comments_rss_link,请换用 post_comments_feed_link()。 in /home/linluxiang/site/www/blog.linluxiang.info/wp-includes/functions.php on line 3467
RSS or TrackBack to '使用greenlet中一点简单心得'.

  1. 哈哈,这个域名太直接了吧。

    greenlet之前是重构的时候用来把各种异步调用变得看起来像同步的样子。

    最近的这个技术沙龙主题蛮给力啊,事后有视频?还是音频?

    smallarcher

    17 二 11 at 09:41

Leave a Reply