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调用

     

     

     

  • 相关阅读:
    LNMP安装后MYSQL数据库无法远程访问解决
    Ubuntu忘记root密码怎么办?
    composer安装出现proc_open没有开启问题的解决方案
    LNMP搭建环境遇到的N多坑
    lnmp HTTP ERROR 500
    LNMP集成运行(开发)环境的部署
    最新javamail 使用方案,可以异步发送邮件
    vi常用快捷键
    Dom4j解析XML文件
    Multiple markers at this line @Override的解决方法
  • 原文地址:https://www.cnblogs.com/chickenwrap/p/10176603.html
Copyright © 2011-2022 走看看