zoukankan      html  css  js  c++  java
  • python协程和yeild

    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:Python34python.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
    公众号请关注:侠之大者
  • 相关阅读:
    BootStrap2学习日记15----选项卡
    BootStrap2学习日记14----导航
    Google地图下载工具代码
    SqlServer 动态SQL(存储过程)中Like 传入参数无正确返回值的问题
    地球坐标-火星坐标-百度坐标及之间的转换算法 C#
    GIS基础知识
    Gps坐标有效性判定
    Gps坐标距离计算C#实现
    C# 对字段忽略模型校验
    SQL基础复习2
  • 原文地址:https://www.cnblogs.com/kamil/p/5336719.html
Copyright © 2011-2022 走看看