python协程和yeild

it2022-05-06  8

python多线程其实在操作系统级别是进程,因为在执行时,默认加了一个全局解释器锁(GIL),python的多线程,本质还是串行的,无法利用多核的优势;在java和C# 中,多线程是并发的,可以充分利用多核优势,但是线程切换是有调度器控制的;也会带来其他一些麻烦,线程共享的不可控性带来的安全问题,通过加锁来解决,又会导致对性能产生影响。

协程:

#!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 生消模型.py @time: 2016/3/30 8:59 """ def consumer(): n = 0 print ("消费者到位") while True: n = yield n if not n: return n -= 2 print("消费2,还剩下%d" %n) def produce(c): n = 0 next(c) while n < 7: n += 3 print("生产了3个,总共还有 %d" %n) n = c.send(n) print(">>还剩余: %d" %n) c.close c = consumer() produce(c)

结果:

C:\Python34\python.exe D:/kamil/Documents/py/Day9/生消模型.py 消费者到位 生产了3个,总共还有 3 消费2,还剩下1 >>还剩余: 1 生产了3个,总共还有 4 消费2,还剩下2 >>还剩余: 2 生产了3个,总共还有 5 消费2,还剩下3 >>还剩余: 3 生产了3个,总共还有 6 消费2,还剩下4 >>还剩余: 4 生产了3个,总共还有 7 消费2,还剩下5 >>还剩余: 5 生产了3个,总共还有 8 消费2,还剩下6 >>还剩余: 6 生产了3个,总共还有 9 消费2,还剩下7 >>还剩余: 7 Process finished with exit code 0

 

转载于:https://www.cnblogs.com/kamil/p/5336719.html

相关资源:Python协程 yield与协程greenlet简单用法示例

最新回复(0)