zoukankan      html  css  js  c++  java
  • Python学习笔记:协程

    协程:为非抢占式多任务产生子程序的计算机组件,协程允许不同入口点在不同位置暂停或开始执行程序
    从技术角度上讲,是一个可以暂停执行的函数,生成器
    实现:
    1.yield返回
    2.send调用

    协程的四个状态:
    - inspect.getgeneratorstate(···)函数确定,该函数会返回下述字符串的一个
    - GEN_CREATED: 等待开始执行
    - GEN_RUNNING: 解释器正在执行
    - GEN_SUSPENED: 在yield表达式处暂停
    - GEN_CLOSED: 执行结束
    - next预激(prime)

    协程中止:
    - 协程中未处理的异常会向上冒泡,传给next 函数或send方法的调用方(即触发协程的对象)
    - 停止协程:发送某个哨符值,让协程退出。内置的None和Ellipsis常量经常用作哨符值

    yield from
    - 调用协程为了得到返回值,协程必须正常中止
    - 生成器正常中止会发出StopIteration异常,异常对象的value属性保存返回值
    - yield from 从内部捕捉StopIteration异常

    委派生成器:
    - 包含yield from表达式生成器的函数
    - 委派生成器在yield from表达式处暂停,调用方可以直接把数据发给子生成器
    - 子生成器在把产出的值发给调用方
    - 子生成器在最后,解释器会抛出StopIteration,并且把返回值附加到异常对象上

    生成器generator:一边循环一边计算下一个元素的机制/算法
    满足三个条件:
    1.每次调用都生产出for循环需要的下一个元素
    2.如果到达最后一个,输出StopIteration异常
    3.可被next调用

     

     

     

  • 相关阅读:
    Django路由控制
    Django杂录
    JQuery
    php-高级计算器
    单项链表
    php解决约瑟夫环
    开灯算法问题
    PHP经典算法之背包问题
    归并排序
    php踩过的那些坑(5)浮点数计算
  • 原文地址:https://www.cnblogs.com/chickenwrap/p/10176603.html
Copyright © 2011-2022 走看看