Python开源异步并发框架
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开源异步并发框架的更多相关文章
- Python 开源异步并发框架的未来
http://segmentfault.com/a/1190000000471602 开源 Python 是开源的,介绍的这几个框架 Twisted.Tornado.Gevent 和 tulip 也都 ...
- 【python】15个最受欢迎的Python开源框架
Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...
- 14个最受欢迎的Python开源框架
本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...
- 最受欢迎的15个Python开源框架
GitHub中15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. 1.Django: Python Web应用开发框架 Django 应 ...
- 15个最受欢迎的Python开源框架
以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...
- 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个
从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Djang ...
- 【转】15个最受欢迎的Python开源框架
以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...
- 转载:15个最受欢迎的Python开源框架
出自:http://python.jobbole.com/72306/?replytocom=57112 15个最受欢迎的Python开源框架 Django: Python Web应用开发框架 Dja ...
- 15个最受欢迎的Python开源框架(转载)
一.Django: Python Web应用开发框架 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理 ...
随机推荐
- C++ Primer 学习笔记_88_用于大型程序的工具 --异常处理[续1]
用于大型程序的工具 --异常处理[续1] 四.又一次抛出 有可能单个catch不能全然处理一个异常.在进行了一些校正行动之后,catch可能确定该异常必须由函数调用链中更上层的函数来处理,catch能 ...
- CodeForces 160D - Distance in Tree 树型DP
题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include& ...
- Node.js笔记2
入门二 5. 事件 Node.js中所有的异步I/O操作完成时都会发送一个事件到事件队列. Events 事件模块 `events.EventEmitter` 简单用法: var EventEmitt ...
- ios开发学习笔记(1)
objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...
- mac的svn之cornerstone简易教程
链接地址:http://jingyan.baidu.com/article/9989c74612a55af648ecfef2.html 背景: 关于cornerstone的介绍很少: 这里介绍mac的 ...
- Penalty
Penalty时间限制:1000 ms | 内存限制:65535 KB难度:2描述As is known to us, the penalty is vitally important to comp ...
- [C#绘图]在半透明矩形上绘制字符串
首先要绘制一个半透明的矩形,用到的方法当然是FillRectangle().这个函数在调用的时候除了要指明要绘制的矩形外,还要指明填充矩形的背景色.具体的方法就是在绘制矩形的时候传给它一个画刷Brus ...
- 加装 ImageMagick 性能更佳!
1. 下载 Download ImageMagick 以此文件ImageMagick-6.9.1-10-Q16-x64-dll-win进行,第二次开发的研发 2. 安装 Install ImageMa ...
- [LeetCode]题解(python):076-Minimum Window Substring
题目来源: https://leetcode.com/problems/minimum-window-substring/ 题意分析: 给定两个字符串S和T.在S中找到最短的一个子字符串使得他包括所有 ...
- JVM报错提示
持久代被占满 异常:java.lang.OutOfMemoryError: PermGen space 说明: Perm空间被占满.无法为新的class分配存储空间而引发的异常.这个异常以前是没有的, ...