协程

1. 执行效率极高。因为子程序切换不是线程切换,而是由程序自身控制,因此没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。

2. 不需要多线程的锁机制, 因为只有一个线程,不存在写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了。

协程始终只是一个线程执行,那如何得用多核CPU呢? 最简单的办法就是多进程+协程, 可获得极高的性能、python对协程的支持是通过generator实现的。

在生成器generator中, 可以通过for来迭代,也可以通过next()获取由yield语句返回的下一个值。

在python中yield不但可以返回一个值,它还可以接收调用者发出的参数。

yield实现肥波纳妾:

def fb():
    a, b = 0, 1
    c = 0
    while True:
        yield c
        c = a + b
        a, b = b, c

if __name__ == "__main__":
    tmp = fb()
    for i in range(0, 10):
        result = tmp.__next__()
        priint(result)

生产者消费者模型:

def consumer():
    r = ''
    while True:
        n = yield r
        if not n:
            return
        print('[CONSUMER] Consuming %s...' % n)
        r = '200 OK'

def produce(c):
    c.send(None)
    n = 0
    while n < 5:
        n = n + 1
        print('[PRODUCER] Producing %s...' % n)
        r = c.send(n)
        print('[PRODUCER] Consumer return: %s' % r)
    c.close()

c = consumer()
produce(c)
posted @ 2016-07-29 00:17  黄小墨  阅读(181)  评论(0编辑  收藏  举报