python的协程简单示例

来源:互联网 发布:api数据接口 编辑:程序博客网 时间:2024/06/15 03:18

import timedef consumer():r=''while True:n=yield rif not n:returnprint("[CONSUMER] Consuming %s..." % n)time.sleep(1)r='200OK'def producer(c):c.__next__()n=0while n<5:n=n+1print("[PRODUCER] Producing %s..." % n)r=c.send(n)print("[PRODUCER] Consumer return %s" % r)c.close()if __name__ == '__main__':c=consumer()producer(c)



执行结果如下:

[PRODUCER] Producing 1...
[CONSUMER] Consuming 1...
[PRODUCER] Consumer return 200OK
[PRODUCER] Producing 2...
[CONSUMER] Consuming 2...
[PRODUCER] Consumer return 200OK
[PRODUCER] Producing 3...
[CONSUMER] Consuming 3...
[PRODUCER] Consumer return 200OK
[PRODUCER] Producing 4...
[CONSUMER] Consuming 4...
[PRODUCER] Consumer return 200OK
[PRODUCER] Producing 5...
[CONSUMER] Consuming 5...
[PRODUCER] Consumer return 200OK


协程的简单描述:

 同进程,线程类似,是实现多任务调度的一种方式。前两种需要在内核态进行调度,开销较大。而协程是在用户态进行协作(注意协作二字),开销较小。

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

第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。

转自:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868328689835ecd883d910145dfa8227b539725e5ed000