• python3 coroutine


    最近用了Django的django channels2.0,发现这个东西是支持websocket的。于是经过一段时间,我已经实现在Django工程上实现websocket的处理。然后看了django channels的源码,看到了熟悉的async,于是就开始一段coroutine的学习。

    1 yield from iterator

    首先看下 yield from iterator这个东西。我们都知道yield算是返回一个迭代器,fibonacci数列求值用这个最好,时间复杂度是O(1),大学的时候一直都在去研究更快的算法,无奈我从来就没有用C和Java实现过,当时也不知道有yield这种用法。

    那么yield from iterator就代表:

    for x in iterator:  
        yield x  

    2事件循环

      关于事件循环的一个解释,以下来自:事件循环 

     让我们回到维基百科,事件循环是“在程序中等待、分发事件或消息的编程结构”。简而言之,事件循环的作用是,“当A发生后,执行B”。最简单的例子可能是每个浏览器中都有的JavaScript事件循环,当你点击网页某处("当A发生后"),点击事件被传递给JavaScript的事件循环,然后事件循环检查网页上该位置是否有注册了处理这次点击事件的onclick回调函数("执行B")。如果注册了回调函数,那么回调函数就会接收点击事件的详细信息,被调用执行。事件循环会不停的收集发生的事件,循环已注册的事件操作来找到对应的操作,因此被称为“循环”。Python标准库中的asyncio库可以提供事件循环。asyncio在网络编程里的一个重要应用场景,就是以连接到socket的I/O准备好读/写(通过selector模块实现)事件作为事件循环中的“当A发生后”事件。除了GUI和I/O,事件循环也经常在执行多线程或多进程代码时充当调度器(例如协同式多任务处理)。如果你知道Python中的GIL(General Interpreter Lock),事件循环在规避GIL限制方面也有很大的作用。

    后续更新

  • 相关阅读:
    设计模式 享元模式(池化技术)
    设计模式 混合模式(整体部分模式)
    设计模式 适配器模式
    Flex3示例、 安装 、注册码
    VS2010错误
    转载:glut.h 与 stdlib.h中 的exit()重定义问题的解决
    宿迁软件QQ群(109233721)
    百度地图 开发API接口啦
    Sublime Text 插件个人使用总结&推荐
    sublime text2 使用安装插件中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/feixiaohuijava/p/9004963.html
Copyright © 2020-2023  润新知