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. Tomcat问题之 启动 Cannot find /usr/local/tomcat/bin/setclasspath.sh

    在linux启动startup命令报Cannot find /usr/local/tomcat/bin/setclasspath.sh  使用: unset CATALINA_HOME命令得以解决   ...

  2. 在Notepad++中使用文本对比插件

    目前Notepad++最新版是7.5.1,但很多插件仍然不能在64位版中使用,官网上是这么说的“Note that the most of plugins (including Plugin Mana ...

  3. 针对jquery的ajax中的参数理解

    1. url 发送请求的地址.为空表示当前页. $.ajax({ type: "post", data: studentInfo, contentType: "appli ...

  4. spring-quartz 定时器 给targetMethod传递参数

    今天在做一个项目的时候,要给一个定时器任务的执行方法传递参数,在网上找了一下资料,可以使用arguments参数:   <bean id="subsidyJobDetail" ...

  5. Ajax的open()方法

    Ajax的open()方法有3个参数:1.method:2.url:3.boolean: 参数1有get和post两个取值 参数2表示什么就不用说了 重点说下第3个参数:boolean的取值 当该bo ...

  6. POJ-2155:Matrix(二维树状数祖)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 31892   Accepted: 11594 Descript ...

  7. 破解使用SMB协议的Windows用户密码:acccheck

    一.工作原理 Acccheck是一款针对微软的SMB协议的探测工具(字典破解用户名和密码),本身不具有漏洞利用的能力. SMB协议:SMB(Server Message Block)通信协议主要是作为 ...

  8. 北京Uber优步司机奖励政策(1月16日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. springboot之RMI的使用

    1.RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的 ...

  10. 问题:MongoDB C# driver异常:Truncation resulted in data loss

    问题描述: 原因分析: MongoDB C#驱动在读取数据记录遇到数值类型字段时,如果没有设置允许截断,将抛出TruncationException. 解决方法: [BsonRepresentatio ...