• 协程原理代码演示


    '''
    协程原理演示
    '''
    def consumer():
    r=''
    while True:
    n=yield r
    if not n:
    return
    print('【消费者】正在消费 %s 中...'%n)
    r='OK,完成消费!!'
    
    def produce(c):
    c.send(None)
    n=0
    while n<5:
    n+=1
    print('【生产者】正在生产 %s 中......'%n)
    r=c.send(n)
    print('【生产者】消费者返回了:%s !'%r)
    c.close()
    
    c=consumer()
    produce(c)

    '''

    【生产者】正在生产 1 中......
    【消费者】正在消费 1 中...
    【生产者】消费者返回了:OK,完成消费!! !
    【生产者】正在生产 2 中......
    【消费者】正在消费 2 中...
    【生产者】消费者返回了:OK,完成消费!! !
    【生产者】正在生产 3 中......
    【消费者】正在消费 3 中...
    【生产者】消费者返回了:OK,完成消费!! !
    【生产者】正在生产 4 中......
    【消费者】正在消费 4 中...
    【生产者】消费者返回了:OK,完成消费!! !
    【生产者】正在生产 5 中......
    【消费者】正在消费 5 中...
    【生产者】消费者返回了:OK,完成消费!! !

    注意到consumer函数是一个generator,把一个consumer传入produce后:

    首先调用c.send(None)启动生成器;

    然后,一旦生产了东西,通过c.send(n)切换到consumer执行;

    consumer通过yield拿到消息,处理,又通过yield把结果传回;

    produce拿到consumer处理的结果,继续生产下一条消息;

    produce决定不生产了,通过c.close()关闭consumer,整个过程结束。

    整个流程无锁,由一个线程执行,produce和consumer协作完成任务,所以称为“协程”,而非线程的抢占式多任务。

    最后套用Donald Knuth的一句话总结协程的特点:“子程序就是协程的一种特例。”

    '''

  • 相关阅读:
    从PDF中提取信息----PDFMiner
    python爬取返利网中值得买中的数据
    使用Beautifulsoup爬取药智网数据
    Scrapy--1安装和运行
    BeautifulSoup学习笔记
    windows下安装beautifulsoup4
    C# Json处理相关
    一个Monkey测试的小坑
    Jmeter笔记(Ⅲ) Jmeter的非GUI操作
    Jmeter笔记(Ⅱ)使用Jmeter实现轻量级的接口自动化测试
  • 原文地址:https://www.cnblogs.com/chenxi188/p/10523519.html
Copyright © 2020-2023  润新知