Python开源异步并发框架的未来

    2014年3月30日,由全球最大的中文IT社区CSDN主办的“开源技术大会·” (Open Source Technology Conference ,简称OSTC )在北京丽亭华苑酒店召开。

    本次大会以“启蒙·开源”(Open Mind, Open Source)为主题,邀请到了来自全国各地的30多位开源业界资深人士发表主题演讲,数十个开源社区现场参与,到场的开源软件开发者、贡献者和开源爱好 者总人数超过500人。作为一场“接地气”的开源盛会,“OSTC ”以其开放性、专业性、社交性深受与会者的好评。

    王川:我叫王川,英文名叫Fantix,我的工作主要用Python做创业,业余的时候也会研究不同开源项目,今天主要和Python有关 系,Python3.4两周前发布新的版本,就有今天讲的新的库,相信大家对Python有所了解,或者比较熟悉,简单的来说Python就是解释型的, 更像脚本语言,先从两个比较容易混淆的概念开始说起,不知道大家有没有去办护照的经历,我前一段时间办一个港澳通行证,上午10点去的,下午2点半才办 完,下午饭都没有吃上,真不是办事效率低,人实在是太多了,从窗口一直排到门口,办的这个证这么慢,大家肯定不乐意,领导想了一个辙,多开一个窗口,开 10个窗口,通口量一下就上去了,这个照片非常的写实,和我照片现场一点都不差,虽然这个照片是春运时候拍的。并行的概念就出来了,并行是关于多个处理 器,多个窗口一起办理通行证的业务,要说这只是排一个队,花4个半小时,现场我排了三个队,先排队取号,然后排队照相,照相之后才能办理通行证,每一个队 上都是人在排队,并发的概念也就出来了,大厅里最能站多少人,能站800人,这个并发量就是800。

    并行更多是关注与窗口或者说处理端,必须有一个处理器,它的概念就是要多个处理器,同时在处理不同的事情,和相对的并发不关心处理的一方, 更关注是用户,我们有大量的用户同时在访问一个黑箱的服务器,同时能访问的数量就是并发的数量,并发并不关心服务器里到底有(EK)CPU,还是有 look CPU,如果有一个问题了,如果只有一个CPU并发怎么能实现?有一个常规的做法就是把并发交给操作系统,用操作系统的多进程或者多线程来实现并发,多进 程在这里先不讨论了,因为Python有一些IL多线程其实也并不理想,所以还需要有一个新的方案。

    比较常规的一个办法用操作系统提供的这几个接口,经常被用到,用来做并发,通过这几个接口很容易的操作多个IL的计量,来实现试点驱动并发 编程,什么样的试点驱动呢?现在有一个现象需要同时服务10万客户端,把10万个连接先创建上,通过这样的循环来实现并发,select从10万客户端里 这里选出来最先有数据的客户端,然后做下面的事情,下面的reciv就可以非组塞的方式来实现,就可以非常快速的来完成处理过程,如果select谎报军 情给一个错误的信息,什么也不做,继续循环,这个循环一旦跑起来这个并发就实现了。

    这样的代码简单的写例子还可以,如果写大的外部的应用还是挺费事的,所以要用到框架,Python里关于异步并发框架应用很多,比如 tornado这是facebook的开源的异步框架,把sock给tornado IL LOOK,或者是主循环就可以实现socket,比如有新的连接,新的数据,有时间时候调用这个回调的函数,这个回调函数是异步写的方式,但是写多了也有 一定的难度,其他的库还有对底层的封装,比如一个老牌的酷是twisted,做的分装用是protocol和transbo(音),protocol对应 用层的协议做重装,transbo(音)对底下的传输做封装,在需要有数据的时候调用(trsbook rit)就可以把这个数据发出去,把有一个著名的deferred,实现数据源和函数的分离,defebrred是比较著名的一个部分,用它写的代码和 copak,写小的可以,写大了很难找清楚一个程序前后的顺序,所以抛开deferred,用一个新的技术,在(英文) ,比如callbocks,用就可以直接在同一个函数里拿到这个客户端,下面的程序有4到5个回调函数,写在同一个函数里类似同步的,实是异步的写的方 式,方便程序员写的维护,显示的异步切换,相对于相识追求极致程序员,提出引入的转换,evntlet,gevent,可以把地层的代码打上补贴,如果调 用常规的代码像oropen,如果有一些现有的代码,是同步的,比如jangl如果一部并发的来实现的话是为数不多的选择之一。

    对于显示和隐式的一部切换各有争议,隐式的藏得更深。

    对于Python3的支持对于tornado实现,gevent我来做,最后一批已经发给作者了。

    从统计数据上来看gevent并不是很活跃。

    互操作性,今天大部分的框架都实现了对twisted的支持,时间比较长,大家都会有遗留代码,成为事实上的标准,但是对于不同的框架的第 三方类库的支持,这几个框架都是各成一派,每个人的接口都会有一套自己的实现,像twisted或者mysql,将来会变成什么样?

    Python作者,写了一个库是全新写的一部编程的库,Python的作者和twisted作者聊得太多了,其实这个库挺像twisted,比如collback和import是一样的,添加两秒之后的回调,程序在没两秒钟输出一个(lawork)。

    protocol transport收到消息的时候发回去。

    future概念用来对回调函数进行封装,这个是存在于tes库里的接口。

    asyncio,from可以串接在一起,corouitine对于异步函数做的修饰器,微线程,携程,输出hello world,被修饰的corouitine。

    最下面有一个task和future有一个结果,扔给主循环,达到这样的结果。

    asyncio 更多是一个规范,随着3.4发布的是参考实现,也就是这个蓝色的框,以及原厂的发动机,这个是自己的event loop,写自己的应用程序,asyncio更充分考虑互操作性,可以把原厂的换掉,换上自己的,或者在asyncio,asyncio有两种发动机,通 过用不同的适配器,适配不同的代码,有twisted代码,有gevent代码。

    另外用组装的发动机,用asyncio基本框架,使用已有库的核心,比如说用twisted event lopp,可以直接实现代码是底层是一样的。将来的互操作性,和对已有的适配意义不太大了,因为asyncio每个框架只要实现自己的适配适配到标准的上 面,所有的代码都可以通过这个网络实现一定的互操作性,这个在程序里是很美好的,希望能实现,现在这个实现的过程已经在做了,像twisted和 tomado已经在实现了做了,我自己在做gevnt的适配,就是这样谢谢大家!

Python开源异步并发框架的更多相关文章

  1. Python 开源异步并发框架的未来

    http://segmentfault.com/a/1190000000471602 开源 Python 是开源的,介绍的这几个框架 Twisted.Tornado.Gevent 和 tulip 也都 ...

  2. 【python】15个最受欢迎的Python开源框架

    Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...

  3. 14个最受欢迎的Python开源框架

    本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...

  4. 最受欢迎的15个Python开源框架

    GitHub中15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. 1.Django: Python Web应用开发框架 Django 应 ...

  5. 15个最受欢迎的Python开源框架

    以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...

  6. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个

    从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Djang ...

  7. 【转】15个最受欢迎的Python开源框架

    以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...

  8. 转载:15个最受欢迎的Python开源框架

    出自:http://python.jobbole.com/72306/?replytocom=57112 15个最受欢迎的Python开源框架 Django: Python Web应用开发框架 Dja ...

  9. 15个最受欢迎的Python开源框架(转载)

    一.Django: Python Web应用开发框架 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理 ...

随机推荐

  1. Apache OFbiz entity engine源代码解读

    简单介绍 近期一直在看Apache OFbiz entity engine的源代码.为了能够更透彻得理解,也由于之前没有看人别人写过分析它的文章,所以决定自己来写一篇. 首先,我提出一个问题,假设你有 ...

  2. (转)Log4J日志配置详解

    http://www.cnblogs.com/ITtangtang/p/3926665.html 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源 ...

  3. JavaWeb解释一下什么是 servlet?

    Servlet是一种独立于平台和协议的服务端的java技术,可以生成动态WEB页面与传统的CGI(计算机图形接口)和其他类似的CGI技术相比.Servlet具有更好的可移植性.更强大的功能,更少的投资 ...

  4. Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...

  5. C++ 之STL priority_queue

    priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数,priority_queue<Type, Container, Functional>Type 为数 ...

  6. BZOJ 1997: [Hnoi2010]Planar( 2sat )

    平面图中E ≤ V*2-6.. 一个圈上2个点的边可以是在外或者内, 经典的2sat问题.. ----------------------------------------------------- ...

  7. iter, yield与enumerate的实现

    模拟实现一个enumerate函数 def myEnumerate(seq, start=0): results = [] n = start for i in seq: results.append ...

  8. IOS 单例模式的学习

    单例模式只能修改无法释放,直到程序结束. 我们下面一步一步来做一个单例模式程序 (1)单例一旦创建,是永远存在于内存中的,所以需要创建一个全局量 static MySingletonClass *sh ...

  9. 数据库导出到excel

    项目结构同上一篇 泛型通用的写法 ExportExcel.java package excel; import java.io.OutputStream; import java.lang.refle ...

  10. 网上下载的“上下3D”和“左右3D”影片该如何播放?

    我们平常买的红蓝3D眼镜智能播放红蓝3D片源.网上找3D电影的时候,虽试图去找红蓝3D格式电影,但总会找到不少“左右格式”或者"上下格式"影片.正常播放后发现有两重画面.这种3D电 ...