1.python多少个框架(2023年最新分享)
2.初学Python,源码有哪些Pythonic的源码源码推荐阅读
3.Plotlyä¸djangoåªä¸ªå¥½
4.Gevent源码剖析(二):Gevent 运行原理
python多少个框架(2023年最新分享)
导读:很多朋友问到关于python多少个框架的相关问题,本文首席CTO笔记就来为大家做个详细解答,源码供大家参考,源码希望对大家有所帮助!源码一起来看看吧!源码人人悬赏源码Python几种主流框架比较从GitHub中整理出的源码个最受欢迎的Python开源框架。这些框架包括事件I/O,源码OLAP,源码Web开发,源码高性能网络通信,源码测试,源码爬虫等。源码\x0d\\x0d\Django:PythonWeb应用开发框架\x0d\Django应该是源码最出名的Python框架,GAE甚至Erlang都有框架受它影响。源码Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。\x0d\\x0d\Diesel:基于Greenlet的事件I/O框架\x0d\Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。\x0d\\x0d\Flask:一个用Python编写的轻量级Web应用框架\x0d\Flask是一个使用Python编写的轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2\x0d\模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数\x0d\据库、窗体验证工具。\x0d\\x0d\Cubes:轻量级PythonOLAP框架\x0d\Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregateddata)等工具。\x0d\\x0d\Kartograph.py:创造矢量地图的轻量级Python框架\x0d\Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你可以在virtualenv环境下来测试。\x0d\\x0d\Pulsar:Python的事件驱动并发框架\x0d\Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。\x0d\\x0d\Web2py:全栈式Web框架\x0d\Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的pintos源码剖析开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容GoogleAppEngine。\x0d\\x0d\Falcon:构建云API和网络应用后端的高性能Python框架\x0d\Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。\x0d\\x0d\Dpark:Python版的Spark\x0d\DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。\x0d\\x0d\Buildbot:基于Python的持续集成测试框架\x0d\Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。\x0d\\x0d\Zerorpc:基于ZeroMQ的高性能分布式RPC框架\x0d\Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和Zerorpc一起使用的ServiceAPI被称为zeroservice。Zerorpc可以通过编程或命令行方式调用。\x0d\\x0d\Bottle:微型PythonWeb框架\x0d\Bottle是一个简单高效的遵循WSGI的微型pythonWeb框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。\x0d\\x0d\Tornado:异步非阻塞IO的PythonWeb框架\x0d\Tornado的全称是ToradoWebServer,从名字上看就可知道它可以用作Web服务器,但同时它也是一个PythonWeb的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。\x0d\\x0d\webpy:轻量级的PythonWeb框架\x0d\webpy的设计理念力求精简(Keepitsimpleandpowerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。\x0d\\x0d\Scrapy:Python的爬虫框架\x0d\Scrapy是一个使用Python编写的,轻量级的,简单轻巧,塑源码公司并且使用起来非常的方便。
Python中的爬虫框架有哪些呢?实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实现你想要的功能。更重要的,Python也是数据挖掘和分析的好能手。那么,Python爬虫一般用什么框架比较好?
一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架。这样的做的主要目的,是为了方便管理以及扩展。本文我将向大家推荐十个Python爬虫框架。
1、Scrapy:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它是很强大的爬虫框架,可以满足简单的页面爬取,比如可以明确获知urlpattern的情况。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。它的特性有:HTML,XML源数据选择及提取的内置支持;提供了一系列在spider之间共享的可复用的过滤器(即ItemLoaders),对智能处理爬取数据提供了内置支持。
2、Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。
3、Portia:是一个开源可视化爬虫工具,可让使用者在不需要任何编程知识的获取serverlet源码情况下爬取网站!简单地注释自己感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。简单来讲,它是基于scrapy内核;可视化爬取内容,不需要任何开发专业知识;动态匹配相同模板的内容。
4、newspaper:可以用来提取新闻、文章和内容分析。使用多线程,支持多种语言等。作者从requests库的简洁与强大得到灵感,使用Python开发的可用于提取文章内容的程序。支持多种语言并且所有的都是unicode编码。
5、Python-goose:Java写的文章提取工具。Python-goose框架可提取的信息包括:文章主体内容、文章主要、文章中嵌入的任何Youtube/Vimeo视频、元描述、元标签。
6、BeautifulSoup:名气大,整合了一些常用爬虫需求。它是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup会帮你节省数小时甚至数天的工作时间。BeautifulSoup的缺点是不能加载JS。
7、mechanize:它的优点是可以加载JS。当然它也有缺点,比如文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
8、selenium:这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。Selenium是自动化测试工具,它支持各种浏览器,包括Chrome,Safari,亚洲源码区Firefox等主流界面式浏览器,如果在这些浏览器里面安装一个Selenium的插件,可以方便地实现Web界面的测试.Selenium支持浏览器驱动。Selenium支持多种语言开发,比如Java,C,Ruby等等,PhantomJS用来渲染解析JS,Selenium用来驱动以及与Python的对接,Python进行后期的处理。
9、cola:是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。项目整体设计有点糟,模块间耦合度较高。
、PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。Python脚本控制,可以用任何你喜欢的html解析包。
python都有哪些框架?1、Django
谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python
Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。它与其他框架最大的区别就是,鲜明独特的特性,支持orm,将数据库的操作封装成为Python,对于需要适用多种数据库的应用来说是个比较好的特性。
2、Flask
Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。基于他的这个特性使用者可以花很少的成本就能够开发一个简单的网站。因此,从这个角度来讲,Flask框架非常适合初学者学习。Flask框架学会以后,我们还可以考虑学习插件的使用。
3、Scrapy
Scrapy是一个轻量级的使用Python编写的网络爬虫框架,这也是它与其他Python框架最大的区别。因为专门用于爬取网站和获取结构数据且使用起来非常的方便,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试等等。
4、Diesel
Diesel是基于Greenlet的事件I/O框架,它提供一个整洁的API来编写网络客户端和服务器。它与其他Python框架最大的区别是支持TCP和UDP。
5、Cubes
Cubes作为一个轻量级PythonOLAP框架,包含了OLAP、多维数据分析和浏览聚合数据等工具。
6、Pulsar
Pulsar是Python的事件驱动并发框架。有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
7、Tornado
Tornado全称是ToradoWebServer,仅仅从它的名字上我们就可以知道它可以用作Web服务器,但同时它也是一个Python
Web的开发框架。Tornado和现在的主流Web服务器框架和大多数Python框架有着明显的区别,它是非阻塞式服务器,而且速度相当快。而其他框架不支持异步处理。
Python有哪些好的Web框架常见的5种Web框架:
第一个:Django
Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,如果是新手程序员,可以从这个框架入手。
第二个:Flask
Flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和JinJa2模板引擎,使用BSD授权。
Flask也被称为microframework,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
第三个:Web2py
Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议。
Web2py提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了Web版的在线开发,HTML模板编写,静态文件的上传,数据库的编写的功能。其他的还有日志功能,以及一个自动化的admin接口。
第四个:Tornado
Tornado即是一个Webserver,同时又是一个类web.py的micro-framework,作为框架的Tornado的思想主要来源于web.PY,大家在web.PY的网站首页也可以看到Tornado的大佬Bret
Taylor的这么一段话:“[web.pyinspiredthe]WebframeworkweuseatFriendFeed[and]thewebappframeworkthatshipswithAppEngine…”,因为这层关系,后面不再单独讨论Tornado。
第五个:CherryPy
CherryPy是一个用于Python的、简单而非常有用的Web框架,其主要作用是以尽可能少的操作将Web服务器与Python代码连接,其功能包括内置的分析功能、灵活的插件系统以及一次运行多个HTTP服务器的功能,可运行在最新版本的Python、Jython、android上。
结语:以上就是首席CTO笔记为大家介绍的关于python多少个框架的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
初学Python,有哪些Pythonic的源码推荐阅读
1. 初学Python时,阅读Pythonic的源码是提高编程技能的有效方法。推荐从Python标准库中关于网络编程的代码开始学习。
2. 首先,深入研究`SocketServer`模块,它为创建服务器提供了基础。同时,学习与之相关的`socket`模块,掌握TCP和UDP编程的基础知识。
3. 接下来,关注`SocketServer`模块中的`ForkingMixIn`和`ThreadingMixIn`类,它们分别展示了forking和threading并发机制的混合使用,这是理解多线程和多进程编程的重要途径。
4. 了解`thread`和`threading`模块,这对于管理并发执行的线程至关重要。
5. 随后,研究`select`模块,它允许你处理I/O多路复用,这是理解操作系统如何高效处理并发I/O操作的关键。
6. 通过学习`select`模块,你将自然过渡到对`selectors`的理解,这是Python 3.7引入的更现代的I/O多路复用API。
7. 对于想要深入了解并发编程的初学者,可以学习`asyncore`和`asynchat`模块,它们是异步网络编程的基础。
8. 在网络编程的基础上,如果你的兴趣在于游戏开发或实时应用,可以探索`greenlet`和`gevent`,这些库提供了协程,有助于编写高效的并发代码。
9. 如果你对Web开发感兴趣,从`BaseHTTPServer`、`SimpleHTTPServer`和`CGIHTTPServer`开始你的学习之旅。这些模块可以帮助你理解基本的Web服务器和CGI(Common Gateway Interface)。
. 学习`cgi`和`cgitb`模块,这对于调试和运行CGI脚本非常有用。
. 掌握`cookielib`模块,它处理HTTP cookies,这对于处理用户会话和状态管理至关重要。
. 阅读`wsgiref`模块的源码,它是一个WSGI(Web Server Gateway Interface)参考实现,有助于你理解现代Web框架的工作原理。
. 学习如何编写自己的简单Web框架后,你可以更容易地理解并选择`Flask`、`Web.py`、`Django`或`Pyramid`等流行的Web框架。
. 在进行Web开发时,不可避免地需要与API进行交互。因此,熟悉`httplib`、`urllib`和`urlparse`模块是很重要的,它们帮助你处理HTTP请求和响应。
通过以上步骤,初学者可以逐步建立起对Python网络和Web编程的深刻理解,为进一步的编程之旅打下坚实的基础。
Plotlyä¸djangoåªä¸ªå¥½
导读ï¼ä»å¤©é¦å¸CTOç¬è®°æ¥ç»åä½åäº«å ³äºPlotlyä¸djangoåªä¸ªå¥½çç¸å ³å 容ï¼å¦æè½ç¢°å·§è§£å³ä½ ç°å¨é¢ä¸´çé®é¢ï¼å«å¿äºå ³æ³¨æ¬ç«ï¼ç°å¨å¼å§å§ï¼æ¬æç®å½ä¸è§ï¼
1ãPython æåªäºå¥½ç Web æ¡æ¶2ãpythonæ¾å·¥ä½æ¯å¦Django好è¿æ¯Flask好ï¼3ãweb.pyä¸djangoï¼é£ä¸ªæ´å¥½ï¼4ãPythonä¸å¤§webæ¡æ¶åå«æ¯ä»ä¹ åªä¸ªæ´å¥½5ãpython webå¼åç¨åªä¸ªæ¡æ¶æ¯è¾å¥½Python æåªäºå¥½ç Web æ¡æ¶ä»¥ä¸æ¯ä¼¯ä¹å¨çº¿ä»GitHubä¸æ´çåºç个æå欢è¿çPythonå¼æºæ¡æ¶ãè¿äºæ¡æ¶å æ¬äºä»¶I/Oï¼OLAPï¼Webå¼åï¼é«æ§è½ç½ç»éä¿¡ï¼æµè¯ï¼ç¬è«çã
Django: Python Webåºç¨å¼åæ¡æ¶
Django åºè¯¥æ¯æåºåçPythonæ¡æ¶ï¼GAEçè³Erlangé½ææ¡æ¶åå®å½±åãDjangoæ¯èµ°å¤§èå ¨çæ¹åï¼å®æåºåçæ¯å ¶å ¨èªå¨åç管çåå°ï¼åªéè¦ä½¿ç¨èµ·ORMï¼åç®åç对象å®ä¹ï¼å®å°±è½èªå¨çææ°æ®åºç»æã以åå ¨åè½ç管çåå°ã
Dieselï¼åºäºGreenletçäºä»¶I/Oæ¡æ¶
Dieselæä¾ä¸ä¸ªæ´æ´çAPIæ¥ç¼åç½ç»å®¢æ·ç«¯åæå¡å¨ãæ¯æTCPåUDPã
Flaskï¼ä¸ä¸ªç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶
Flaskæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶ãåºäºWerkzeug WSGIå·¥å ·ç®±åJinja2 模æ¿å¼æãFlaskä¹è¢«ç§°ä¸ºâmicroframeworkâï¼å 为å®ä½¿ç¨ç®åçæ ¸å¿ï¼ç¨extensionå¢å å ¶ä»åè½ãFlask没æé»è®¤ä½¿ç¨çæ°æ®åºãçªä½éªè¯å·¥å ·ã
Cubesï¼è½»é级Python OLAPæ¡æ¶
Cubesæ¯ä¸ä¸ªè½»é级Pythonæ¡æ¶ï¼å å«OLAPãå¤ç»´æ°æ®åæåæµè§èåæ°æ®ï¼aggregated dataï¼çå·¥å ·ã
Kartograph.pyï¼åé ç¢éå°å¾çè½»é级Pythonæ¡æ¶
Kartographæ¯ä¸ä¸ªPythonåºï¼ç¨æ¥ä¸ºESRIçæSVGå°å¾ãKartograph.pyç®åä»å¤äºbetaé¶æ®µï¼ä½ å¯ä»¥å¨virtualenvç¯å¢ä¸æ¥æµè¯ã
Pulsarï¼Pythonçäºä»¶é©±å¨å¹¶åæ¡æ¶
Pulsaræ¯ä¸ä¸ªäºä»¶é©±å¨ç并åæ¡æ¶ï¼æäºpulsarï¼ä½ å¯ä»¥ååºå¨ä¸åè¿ç¨æ线ç¨ä¸è¿è¡ä¸ä¸ªæå¤ä¸ªæ´»å¨çå¼æ¥æå¡å¨ã
Web2pyï¼å ¨æ å¼Webæ¡æ¶
Web2pyæ¯ä¸ä¸ªä¸ºPythonè¯è¨æä¾çå ¨åè½Webåºç¨æ¡æ¶ï¼æ¨å¨ææ·å¿«éçå¼åWebåºç¨ï¼å ·æå¿«éãå®å ¨ä»¥åå¯ç§»æ¤çæ°æ®åºé©±å¨çåºç¨ï¼å ¼å®¹Google App Engineã
Falconï¼æ建äºAPIåç½ç»åºç¨å端çé«æ§è½Pythonæ¡æ¶
Falconæ¯ä¸ä¸ªæ建äºAPIçé«æ§è½Pythonæ¡æ¶ï¼å®é¼å±ä½¿ç¨RESTæ¶æé£æ ¼ï¼å°½å¯è½ä»¥æå°çåæ°åæå¤çäºæ ã
Dparkï¼PythonççSpark
DParkæ¯SparkçPythonå éï¼æ¯ä¸ä¸ªPythonå®ç°çåå¸å¼è®¡ç®æ¡æ¶ï¼å¯ä»¥é常æ¹ä¾¿å°å®ç°å¤§è§æ¨¡æ°æ®å¤çåè¿ä»£è®¡ç®ãDParkç±è±ç£å®ç°ï¼ç®åè±ç£å é¨çç»å¤§å¤æ°æ°æ®åæé½ä½¿ç¨DParkå®æï¼æ£æ¥è¶å®åã
Buildbotï¼åºäºPythonçæç»éææµè¯æ¡æ¶
Buildbotæ¯ä¸ä¸ªå¼æºæ¡æ¶ï¼å¯ä»¥èªå¨å软件æ建ãæµè¯ååå¸çè¿ç¨ãæ¯å½ä»£ç ææ¹åï¼æå¡å¨è¦æ±ä¸åå¹³å°ä¸ç客æ·ç«¯ç«å³è¿è¡ä»£ç æ建åæµè¯ï¼æ¶é并æ¥åä¸åå¹³å°çæ建åæµè¯ç»æã
Zerorpcï¼åºäºZeroMQçé«æ§è½åå¸å¼RPCæ¡æ¶
Zerorpcæ¯ä¸ä¸ªåºäºZeroMQåMessagePackå¼åçè¿ç¨è¿ç¨è°ç¨åè®®ï¼RPCï¼å®ç°ãå Zerorpc ä¸èµ·ä½¿ç¨ç Service API 被称为 zeroserviceãZerorpc å¯ä»¥éè¿ç¼ç¨æå½ä»¤è¡æ¹å¼è°ç¨ã
Bottle: å¾®åPython Webæ¡æ¶
Bottleæ¯ä¸ä¸ªç®åé«æçéµå¾ªWSGIçå¾®åpython Webæ¡æ¶ã说微åï¼æ¯å 为å®åªæä¸ä¸ªæ件ï¼é¤Pythonæ ååºå¤ï¼å®ä¸ä¾èµäºä»»ä½ç¬¬ä¸æ¹æ¨¡åã
Tornadoï¼å¼æ¥éé»å¡IOçPython Webæ¡æ¶
Tornadoçå ¨ç§°æ¯Torado Web Serverï¼ä»ååä¸çå°±å¯ç¥éå®å¯ä»¥ç¨ä½Webæå¡å¨ï¼ä½åæ¶å®ä¹æ¯ä¸ä¸ªPython Webçå¼åæ¡æ¶ãæåæ¯å¨FriendFeedå ¬å¸çç½ç«ä¸ä½¿ç¨ï¼FaceBookæ¶è´äºä¹å便å¼æºäºåºæ¥ã
webpy: è½»é级çPython Webæ¡æ¶
webpyç设计ç念åæ±ç²¾ç®ï¼Keep it simple and powerfulï¼ï¼æºç å¾ç®çï¼åªæä¾ä¸ä¸ªæ¡æ¶æå¿ é¡»çä¸è¥¿ï¼ä¸ä¾èµå¤§éç第ä¸æ¹æ¨¡åï¼å®æ²¡æURLè·¯ç±ã没æ模æ¿ä¹æ²¡ææ°æ®åºç访é®ã
Scrapyï¼Pythonçç¬è«æ¡æ¶
Scrapyæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçï¼è½»é级çï¼ç®å轻巧ï¼å¹¶ä¸ä½¿ç¨èµ·æ¥é常çæ¹ä¾¿ã
pythonæ¾å·¥ä½æ¯å¦Django好è¿æ¯Flask好ï¼
è¿ä¿©é½æºç®åçï¼Djangoåflaské½å¦ä¸ä¸æ¯è¾å¥½ï¼Pythonåºç¡ä¹å¾éè¦ãè¿ä¿©å¦å¥½äºï¼å·¥ä½ä¸æï¼èªèµè¿æ¯çå ·ä½æ åµã
web.pyä¸djangoï¼é£ä¸ªæ´å¥½ï¼ä¸ç¥éä½ è¦åä»ä¹ç±»åçåºç¨ãweb.pyæ¯è½»é级没éï¼djangoä¹ä¸è§å¾æå¤ééãä½æ¯ådjangoå¼åï¼åªè¦ä½ ç¨å°æ°æ®åºï¼ä½ ä¼è§å¾ååæ¹ä¾¿ãè³äºè¯´è¦æ¹å¨çå æ ¸å¤ï¼ä¸è¬çç½ç»åºç¨ç¨åºï¼ç»å¯¹ä¸éè¦ä½ å»æ¹ä»ä¹å æ ¸ãè³å°å°ç®å为æ¢ï¼æèªå·±è¿æ²¡æ碰å°è¦æ¹å æ ¸çæ åµãè¯è¯´å¦æä½ çæ°´å¹³é«å°è½æ¹å æ ¸çç¨åº¦äºï¼ä¹å°±ä¸éè¦åçº ç»äºè¿ä¸ªé®é¢äºï¼èªå·±é½å¯ä»¥åä¸ä¸ªæ¡æ¶äºã
个人认为djangoæ¯ç¸å½å¹³è¡¡èå好ç¨çãæ¯å¦è¯´djangoçModelåTemplateï¼ä½ æ¢å¯ä»¥ç¨ï¼ä¹å¯ä»¥ä¸ç¨ï¼æ²¡æ说ä¸å®å¼ºè¿«ä½ ç¨ãæ以说djangoæ¯éé级çï¼ä¼°è®¡ä¹æ¯ä¸ç¥å解ã
åä¸è¬çç½ç»åºç¨ï¼å¼ºç建议使ç¨django.
Pythonä¸å¤§webæ¡æ¶åå«æ¯ä»ä¹ åªä¸ªæ´å¥½ã导读ãç®åï¼Pythonæ¯è¾ç«çä¸å¤§webæ¡æ¶æDjangoãFlaskåTornadoï¼è¦è®ºè¿ä¸ä¸ªWebæ¡æ¶åªä¸ªæ´å¥½çè¯ï¼å»ºè®®ä¸ç¹ï¼Django帮æ们äºå æ建äºå¥½å¤ï¼ä¸æä¼å¿«ä¸äºï¼å¦ä¹ çè¯å¯ä»¥å ä»Djangoå¦èµ·ï¼ç¶ååå¦ä¹ FlaskåTornadoï¼ä¸é¢æ们就æ¥å ·ä½äºè§£ä¸ä¸Pythonä¸å¤§webæ¡æ¶ç详æ ã
1ãDjango
Djangoæ¯ä¸ä¸ªå¼æ¾æºä»£ç çWebåºç¨æ¡æ¶ï¼ç±Pythonåæãéç¨äºMTVçæ¡æ¶æ¨¡å¼ï¼å³æ¨¡åMï¼æ¨¡æ¿Tåè§å¾Vãå®æåæ¯è¢«å¼åæ¥ç¨äºç®¡çå³ä¼¦æ¯åºçéå¢æä¸çä¸äºä»¥æ°é»å 容为主çç½ç«çï¼å³æ¯CMS(å 容管çç³»ç»)软件ã
2ãFlask
Flaskæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶ãå ¶ WSGIå·¥å ·ç®±éç¨Werkzeug ï¼æ¨¡æ¿å¼æåä½¿ç¨ Jinja2
ãFlask使ç¨BSDææã
Flaskä¹è¢«ç§°ä¸º âmicroframeworkâ ï¼å 为å®ä½¿ç¨ç®åçæ ¸å¿ï¼ç¨ extension
å¢å å ¶ä»åè½ãFlask没æé»è®¤ä½¿ç¨çæ°æ®åºãçªä½éªè¯å·¥å ·ã
Flask å¾è½»ï¼è±å¾å°çææ¬å°±è½å¤å¼åä¸ä¸ªç®åçç½ç«ãé常éååå¦è å¦ä¹ ãFlask æ¡æ¶å¦ä¼ä»¥åï¼å¯ä»¥èèå¦ä¹ æ件ç使ç¨ãä¾å¦ä½¿ç¨ WTForm +
Flask-WTForm æ¥éªè¯è¡¨åæ°æ®ï¼ç¨ SQLAlchemy + Flask-SQLAlchemy æ¥å¯¹ä½ çæ°æ®åºè¿è¡æ§å¶ã
3ãTornado
Tornadoæ¯ä¸ç§ Web æå¡å¨è½¯ä»¶çå¼æºçæ¬ãTornado åç°å¨çä¸»æµ Web æå¡å¨æ¡æ¶(å æ¬å¤§å¤æ° Python
çæ¡æ¶)æçææ¾çåºå«ï¼å®æ¯éé»å¡å¼æå¡å¨ï¼èä¸é度ç¸å½å¿«ã
å¾å©äºå ¶ éé»å¡çæ¹å¼å对epollçè¿ç¨ï¼Tornado æ¯ç§å¯ä»¥å¤çæ°ä»¥å计çè¿æ¥ï¼å æ¤ Tornado æ¯å®æ¶ Web æå¡çä¸ä¸ª
çæ³æ¡æ¶ã
å ³äºPythonä¸å¤§webæ¡æ¶çç®åä»ç»ï¼å°±ç»å¤§å®¶å享å°è¿éäºï¼å½ç¶å¦ä¹ æ¯æ°¸æ æ¢å¢çï¼å¦ä¹ ä¸é¡¹æè½æ´æ¯åçç»èº«ï¼æ以ï¼åªè¦è¯åªåå¦ï¼ä»ä¹æ¶åå¼å§é½ä¸æï¼å¸æ大家æç´§æ¶é´è¿è¡å¦ä¹ å§ã
python webå¼åç¨åªä¸ªæ¡æ¶æ¯è¾å¥½ï¼1ï¼DjangoãDjangoçææ¡£æå®åãå¸åºå æçæé«ãæèèä½æå¤ä¼°è®¡å¤§å®¶é½æ²¡ä»ä¹æè§ãå®ç¾çææ¡£ï¼Djangoçæåï¼æè§å¾å¾å¤§ä¸é¨ååå è¦å½åäºDjangoè¿ä¹å®ç¾çå®æ¹ææ¡£ï¼å æ¬Django bookï¼ãå ¨å¥ç解å³æ¹æ¡ï¼Django象Railsä¸æ ·ï¼æä¾å ¨å¥ç解å³æ¹æ¡ï¼full-stack framework + batteries includedï¼ï¼åºæ¬è¦ä»ä¹æä»ä¹ï¼æ¯å¦ï¼cacheãsessionãfeedãormãgeoãauthï¼ï¼èä¸å ¨é¨Djangoèªå·±é ï¼å¼åç½ ç«åºæçå·¥å ·Djangoåºæ¬é½ç»ä½ å好äºï¼å æ¤å¼åæçæ¯ä¸ç¨è¯´çï¼åºäºé®é¢ä¹ç®å¥½æ¾ï¼ä¸å¨ä½ ç代ç éå°±å¨Djangoçæºç éã
ï¼2ï¼PylonsåDjangoç设计ç念å®å ¨ä¸åï¼Pylonsæ¬èº«åªæ两åè¡å·¦å³çPython代ç ï¼ä¸è¿å®è¿é带æä¸äºå ä¹å°±æ¯Pylonså¾¡ç¨ ç第ä¸æ¹æ¨¡åãPylonsåªæä¾ä¸ä¸ªæ¶ååå¯éæ¹æ¡ï¼ä½ å¯ä»¥æ ¹æ®èªå·±çå好èªç±çéæ©TemplateãORMãformãauthçç»ä»¶ï¼ç³»ç»é«åº¦å¯ å®å¶ãæ们常说Pythonæ¯ä¸ä¸ªè¶æ°´è¯è¨(glue language)ï¼é£ä¹æ们å®å ¨å¯ä»¥è¯´Pylonså°±æ¯ä¸ä¸ªç¨è¶æ°´è¯è¨è®¾è®¡çè¶æ°´æ¡æ¶ã
ï¼3ï¼Tornadoå³æ¯ä¸ä¸ªWeb serverï¼å¯¹æ¤æ¬æä¸ä½è¯¦è¿°ï¼ï¼åæ¶åæ¯ä¸ä¸ªç±»web.pyçmicro-frameworkï¼ä½ä¸ºæ¡æ¶Tornadoçææ³ä¸»è¦æ¥æºäºWeb.pyï¼å¤§å®¶å¨Web.pyçç½ç«é¦é¡µä¹å¯ä»¥çå°Tornadoç大佬Bret Taylorçè¿ä¹ä¸æ®µè¯ï¼ä»è¿é说çFriendFeedç¨çæ¡æ¶è·Tornadoå¯ä»¥çä½æ¯ä¸ä¸ªä¸è¥¿ï¼ï¼
ï¼4ï¼BottleåFlaskä½ä¸ºæ°çä¸ä»£Pythonæ¡æ¶ç代表ï¼æºæææçæ¯é½éç¨äºdecoratorçæ¹å¼é ç½®URLè·¯ç±ã
ï¼5ï¼Flask ç²¾ç®
ï¼6ï¼web.py é常精ç®
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºPlotlyä¸djangoåªä¸ªå¥½çç¸å ³å 容解çæ±æ»äºï¼å¸æ对æ¨ææ帮å©ï¼å¦æ解å³äºæ¨çé®é¢æ¬¢è¿å享ç»æ´å¤å ³æ³¨æ¤é®é¢çæååï½
Gevent源码剖析(二):Gevent 运行原理
Gevent的运行原理在python2.7.5版本下,涉及多个关键概念。简单来说,它通过Greenlet类和Hub事件循环实现并发执行。以下是核心步骤:
首先,通过导入gevent模块,引入其初始化设置,greenlet的运行函数通过gevent.spawn()方法注册到Hub,这个过程包括获取Hub实例、初始化greenlet并保存函数和参数。get_hub()利用线程局部存储保证Hub的多线程一致性。
接着,greenlet通过g.start()注册到事件循环,回调事件由switch()控制,而不是直接运行函数,实现了协程的切换。Gevent提供了join()和joinall()两个入口,其中joinall()控制了整个流程。
在详细流程中,iwait()函数扮演重要角色,通过创建Waiter对象,将协程的switch()链接到目标,通过waiter.get()控制协程执行和返回。Hub事件循环与运行协程通过waiter.get()和waiter.switch()协同工作,实现了并发执行。
目标协程的执行涉及事件循环的启动,通过Cython调用libev库执行。目标函数在run()中执行,并通过_report_result()和_report_error()处理结果或异常。"绿化"函数是实现并发的关键,它们允许在等待I/O操作时释放控制权,从而实现多任务并发。
总的来说,Gevent的运行涉及复杂的协程调度和事件驱动,虽然本文仅触及表面,但其背后的并发机制和技术细节更为丰富,包括异常处理和大量"绿化"函数的使用,这将在后续深入探讨。