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. 经典union的使用

    一个用户下广告位  某一天有收入和支出  有支出不一定有收入  有收入不一定有支出  下例为按用户查询 sanhao 下的信息 支出如下: 收入如下: 按天进行查询,例如查询: 得到结果如下: 使用一 ...

  2. c++ 简单的词法分析

    scanner.h #include<iostream> #include<fstream> #include<string> using namespace st ...

  3. The Standard Librarian: I/O and Function Objects: Containers of Pointers

    C++ Experts Forum The Standard Librarian: I/O and Function Objects: Containers of Pointers Matthew A ...

  4. Java Socket 入门1

    由程序逻辑可以看到 这是一个 客户端和服务端一对一聊天的程序  首先由服务端说第一句话然后对话才开始 且只能客户端一行话  服务端再一行话 这样往复进行  客户端若想不等服务端回应继续说话是不行的 服 ...

  5. IT项目经理

    项目经理是具体项目工作的管理者,他们在工作中不断提升自己的领导才华,同时该职业又是一个权利与责任并存的职业, 他们主要对项目进行背景调查,收集整理项目相关资料,进行需求策划,撰写项目调查报告和信息综述 ...

  6. 《刺杀金正恩》1080p全高清无水印,附中文字幕 bt种子下载,附字母(百度网盘/360云盘)

    <刺杀金正恩>1080p全高清无水印,附中文字幕下载(百度网盘/360云盘) 种子和字幕下载地址: thunder://QUFlZDJrOi8vfGZpbGV8JUU5JTg3JTg3JU ...

  7. cocos2dx中的层CCLayer

    什么是层,层在cocos2dx里是一个能处理触摸事件的CCNode,因为它负责用户交互,因此大部分游戏细节都在这个类中完成,所以我们经常派生这个图层来完成逻辑交互代码.当然如果你的图层不需要接受交互信 ...

  8. HDU - 5009 Paint Pearls(dp+优化双向链表)

    Problem Description Lee has a string of n pearls. In the beginning, all the pearls have no color. He ...

  9. C#利用委托跨线程更新UI数据

    转:http://www.2cto.com/kf/201206/136587.html 在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面 ...

  10. linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!

    linker command failed with exit code 1 (use -v to see invocation)这个肯定是个xcode编译运行的时候经典的报错了. 这个问题曾经在我的 ...