1.异步之难:因为其执行吮吸不可预料,当下正要发生什么事件不可预料。
        程序下一步行为往往依赖上一步值执行结果,如何知晓上次异步调用已完成并获取结果,
        回调成了必然选择,那又需要面临“回调地狱”的折磨
2.事例:例如我前不久主导重写的项目,使用Python异步编程,改版后由原来的7台服务器削减至3台,成本骤降57%。
3.名言:除了瓶颈之外,任何改进都是幻觉
4.I/O是计算机运行速度提升的最大瓶颈。最大地球上最发达、规模最大的计算机程序,莫过于因特网,网络I/O是最大的瓶颈。所以,诸多异步框架都针对的是网络I/O。
5.爬虫:自动从万维网上获取信息的脚本。例如,搜索引擎从万维网上获取网页。
6.分进程的时间主要耗在:进程切换开销。当进程数量大于CPU核心数量时,进程切换时必然需要的。
  多进程另一个缺点:状态共享。(Process)
7.继续改进,多线程:一个python进程中,只允许有一个线程处于运行状态。线程调度是抢占式的,所以也存在竞态条件的可能,如何保证执行过的线程不会重复执行。
8.GIL:为了解决多线程问题,即线程间数据一致性和状态同步。而解决最简单方法就是加锁,于是有了GIL这把大锁(Global Interpreter Lock)。
9.非阻塞方式:可能在等待一个结果时候,cpu会存在空闲下来的时候。如何有效利用这段COU空闲时间成了下一步主要解决的问题。
10.非阻塞方式改进:OS将I/O状态的变化都封装成了事件。并且提供了专门的系统模块(演变:select-->poll-->kqueue(BSD内核),epoll(Linux内核))让应用程序可以接收事件通知。当接收到要等到的通知之后,通过事件回调继续执行。
11.总结:从同步阻塞到异步非阻塞,异步编程大多数应用  事件循环+回调,当然大多数时间都花在设计回调函数上。

12.事件循环+回调-->asynclo原生协程模式
13.事件循环+回调这种方式存在问题:回调层次过多时代码可读性差;破坏代码结构,共享状态管理困难,错误处理困难。
   Python 生态也以终为始,秉承着“程序猿不必难程序猿”的原则,让语言和框架开发者苦逼一点,也要让应用开发者舒坦。
   在事件循环+回调的基础上衍生出了基于协程的解决方案,代表作有:Tornado、Twisted、asyncio 等。
14.异步编程最大的困难:异步任务何时执行完毕?接下来要对异步调用的返回结果做什么操作?
   上述问题已经通过事件循环和回调解决了。程序知道当前所处的状态,而且要将在不同的回调之间延续下去。
   为了规避事件循环和回调的问题,采用协作式多任务。任务之间得相互通知,每个任务有自己的状态。
15.协程:协作式的例程。它是非抢占式的多任务子例程的概括,可以允许有多个入口点在例程中确定的位置来控制程序的暂停与恢复执行。
   例程:编程语言定义的可被调用的代码段,一般用成为函数或方法的代码结构体来体现。
16.早期发现生成器的特点和协程很像。每一次迭代之间,会暂停执行,继续下一次迭代的时候还不会丢失先前的状态。
17.基于生成器的协程来实现:
18.未来对象:怎么知道异步调用的结果?先设计一个对象,异步调用执行完的时候,就把结果放在它里面。这种对象称之为未来对象。
19.用 yield from 改进生成器协程。
20.Python 3.6中asyncio库成为标准库的正式一员。

python异步初步窥探的更多相关文章

  1. 深入理解 Python 异步编程(上)

    http://python.jobbole.com/88291/ 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知 ...

  2. Python异步IO --- 轻松管理10k+并发连接

    前言   异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异.软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览 ...

  3. python异步加协程获取比特币市场信息

    目标 选取几个比特币交易量大的几个交易平台,查看对应的API,获取该市场下货币对的ticker和depth信息.我们从网站上选取4个交易平台:bitfinex.okex.binance.gdax.对应 ...

  4. 深入理解Python异步编程(上)

    本文代码整理自:深入理解Python异步编程(上) 参考:A Web Crawler With asyncio Coroutines 一.同步阻塞方式 import socket def blocki ...

  5. 这篇文章讲得精彩-深入理解 Python 异步编程(上)!

    可惜,二和三现在还没有出来~ ~~~~~~~~~~~~~~~~~~~~~~~~~ http://python.jobbole.com/88291/ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  6. [django]python异步神器-celery

    python异步神器celery https://segmentfault.com/a/1190000007780963

  7. 转-python异步IO-asyncio

    原文连接 http://blog.chinaunix.net/uid-190176-id-4223282.html 前言 异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上 ...

  8. uvloop —— 超级快的 Python 异步网络框架

    简短介绍 asyncio是遵循Python标准库的一个异步 I/O框架.在这篇文章里,我将介绍 uvloop: 可以完整替代asyncio事件循环.uvloop是用Cython写的,基于 libuv. ...

  9. python 异步编程

    Python 3.5 协程究竟是个啥 Yushneng · Mar 10th, 2016 原文链接 : How the heck does async/await work in Python 3.5 ...

随机推荐

  1. double工具类

    package com.zq.utils; /** * * 经度数字操作类 * * Created by MyEclipse. Author: ChenBin E-mail: chenbin_2008 ...

  2. Java学习笔记十五:Java中的成员变量和局部变量

    Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...

  3. 【8086汇编-Day7】关于多个段的程序的实验

    实验一 实验二 实验三 实验四 实验五 实验六 总结 在集成环境下,内存从0770段开始按照段的先后顺序和内容多少分配,并且分配的都是16的倍数 关于实际占用的空间公式的话其实极容易想到(假设有N个字 ...

  4. IIC总线协议和时序

    IIC标准速率为100Kbit/s,快速模式400Kbit/s,支持多机通信,支持多主控模块,但是同一时刻只允许有一个主控.由数据线SDA和时钟SCL构成串行总线:每个电路模块都有唯一地址.I2C设备 ...

  5. 版本控制工具——Git的拓展使用

    一.使用Github 通过前面两节已经配置了SSH Key与Github上的相关设置,接下来介绍常用的使用 使用Fork克隆一份到本地仓库 之后可以在自己的仓库克隆一份到本地 git clone gi ...

  6. Unbuntu安装RVM

    apt-get install curl #安装rvm curl -L https://get.rvm.io | bash #执行启动 source /home/mafei/.rvm/scripts/ ...

  7. Java - 无乱码读写文件

    Java读取数据流的时候,一定要指定数据流的编码方式,否则将使用本地环境中的默认字符集. BufferedReader reader = null; String laststr = "&q ...

  8. Mybatis JPA 插件简介

    前段时间了解到Spring JPA,感觉挺好用,但其依赖于Hibernate,本人看到Hibernate就头大(不是说Hibernate不好哈,而是进阶太难),于是做了一个迷你版的Mybatis JP ...

  9. iTextSharp动态生成多页pdf及追加内容等记录

    1.要动态生成pdf,无非是用第三方或直接代码生成. 2.iTextSharp生成pdf问题点记录 dll相关下载 https://files.cnblogs.com/files/xlgwr/iTex ...

  10. 浅谈如何提高自动化测试的稳定性和可维护性 (pytest&allure)

    装饰器与出错重试机制 谈到稳定性,不得不说的就是“出错重试”机制了,在自动化测试中,由于环境一般都是测试环境,经常会有各种各种的抽风情况影响测试结果,这样就为测试的稳定性带来了挑战,毕竟谁也不想自己的 ...