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. wordpress | 网站访问速度优化方案(Avada)

    一.谷歌字体 原因: Wordpress系统默认使用谷歌字体,在国内谷歌域名被屏蔽,所以导致操作反应慢. 解决方法: 对于后台:找到Wordpress这个文件 /wp-includes/script- ...

  2. ACM 2003~2005

    ACM 2003 求实数的绝对值 import java.util.Scanner; public class Lengxc { public static void main(String[] ar ...

  3. 常见IE8兼容性问题及解决

    1.css3媒体查询 IE8不支持媒体查询 解决:respond.js,在页面中所有css文件的引用位置之后引用Respond.js 2.HTML5新标签 IE8不支持H5新标签 解决:html5sh ...

  4. java中子类会继承父类的构造方法吗?

    参考: https://blog.csdn.net/wangyl_gain/article/details/49366505

  5. C、C++混合调用

    在项目中,C和C++代码相互调用是很常见的,但在调用时,究竟应该如何编写代码和头文件,有一些讲究,不然就可能出现编译时链接不通过的问题,典型的编译错误日志是: undefined reference ...

  6. #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby

    #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby # This script installs to ...

  7. Java设计模式(17)——行为模式之观察者模式(Observer)

    一.概述 概念 UML简图 我们根据一个示例得类图来分析角色 角色 抽象主题:保存观察者聚集(集合),管理(增删)观察者 抽象观察者:定义具体观察者的抽象接口,在得到主题通知后更新自己 具体主题:将有 ...

  8. 20145226夏艺华 《Java程序设计》第1周学习总结

    http://www.cnblogs.com/bestixyh/p/5779286.html 去年暑假写的,确实比较丑陋,保留下来也是为了激励自己作出更多改变.寒假写的每一篇博客都尽最大努力养成了良好 ...

  9. LeetCode: 53. Maximum Subarray(Easy)

    1. 原题链接 https://leetcode.com/problems/maximum-subarray/discuss/ 2. 题目要求 给定一个整型数组,返回其子串之和的最大值 例如,[-2, ...

  10. plsql解决中文乱码

    进入 我的电脑,属性,高级,环境变量,添加2项: 1.LANG=zh_CN.GBK 2.NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK