python协程和yeild
2016-03-30 12:48
465 查看
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
相关文章推荐
- python笔记1 对象类型小结
- 7个步骤掌握使用python进行机器学习
- Python3.5里print()的用法
- python学习4:获取豆瓣上映电影数据
- python学习3:获取股票历史数据
- python学习2:urllib2
- python学习1:urllib
- Python函数参数传递:传值还是传引用
- python - 常用模块栗子
- 横向对比分析Python解析XML的四种方式
- python类初探
- Python 第十一篇:开发堡垒机
- python 装饰器
- Python——Pandas
- 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)
- 机器学习实战笔记(Python实现)-01-机器学习实战
- python web开发 之 flask教程(三)
- python 之sqlalchemy many to many
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- Python学习2_Python3.x和Python2.x的区别