zoukankan      html  css  js  c++  java
  • python协程 示例

    协程

    1.协程 又称微线程 是一种轻量级线程  携程有自己的寄存器 上下文 和栈 携程能保留上一次调用时的状态

    2.协程优点和缺点 :

    1.无需线程上下文切换的开销

    2.无需原子操作锁定及同步的开销

    3.高并发 高扩展性 低成本

    缺点:

    1.无法利用多核资源

    2.阻塞操作会阻塞整个程序

      python利用 yield来达到携程效果,:先看下 关于yield的两个用法 ( yield from  是python3 的方法)

    def aa():
        for i in 'ab':
            yield i
        for i2 in range(0, 3):
            yield i2
    print list(aa())
    》》》
    ['a', 'b', 0, 1, 2]
    
    
    def bb():
        yield from 'ab'
        yield from range(3)
    print (list(bb()))
    》》》
    ['a', 'b', 0, 1, 2]

    利用yield 来写一个经典的生产 消费者:

    def consumer(name):# 消费者
        print("--->starting")
        while True:
            new_baozi = yield
            print("[%s] is eating baozi %s" % (name, new_baozi))
    
    
    def producer():
        # r = con.__next__()
        r = con.send(None)  #启动生成器
        n = 0
        while n < 5:
            n += 1
            con.send(n)
        time.sleep(3)
    
    if __name__ == '__main__':
        con = consumer("c1")
        p = producer()
    """
    1.给con赋值为消费者生成器函数
    2.给p赋值为生产者函数
    3.进入生产者函数 启动消费者生成器函数
    4.进入消费者函数 遇到yield函数停止
    5.返回到生产者函数 进入while 循环 给消费者函数发送n的值
    6.进入消费者函数 此时yield的返回值为n
    """
    欢迎纠错
  • 相关阅读:
    Quartz快速入门 (转自 http://www.blogjava.net/baoyaer/articles/155645.html)
    C#HTML 转文本及HTML内容提取
    创建连接字符串方法
    源生js _AJax
    .NET里面附件上传大小限制的控制
    错误记录 COM
    Quartz的cron表达式
    Quartz 多任务调用
    Myeclipse的web工程和Eclipse互相转换
    Myeclipse8.0序列号生成程序
  • 原文地址:https://www.cnblogs.com/nanyu/p/11668767.html
Copyright © 2011-2022 走看看