python常用库
必学的10大顶级Python库
作为数据科学和机器学习相关的研究和开发人员,大家每天都要用到 python。在本文中,我们将讨论一些 python 中的顶级库,开发人员可以使用这些库在现有的应用程序中应用、清洗和表示数据,并进行机器学习研究。
我们将讨论以下 10 个库:
- TensorFlow
- Scikit-Learn
- Numpy
- Keras
- PyTorch
- LightGBM
- Eli5
- SciPy
- Theano
- Pandas
简介
python 是最流行和使用最广泛的编程语言之一,它已经取代了业界许多编程语言。
python 在开发人员中流行的原因有很多。然而,最重要的一点是它有大量的库供用户使用。
python 的简单性吸引了许多开发人员为机器学习创建新的库。由于有大量的库,python 在机器学习专家中变得非常流行。
所以,这里要介绍的第一个库是 TensorFlow。
1.TensorFlow
什么是 TensorFlow?
如果你目前正在使用 python 进行机器学习项目,那么你可能听说过这一个流行的开源库,那就是 TensorFlow。
这个库是由 Google 与 Brain Team 合作开发的,几乎每一个 Google 的机器学习应用程序都用到了 TensorFlow。
TensorFlow 就像一个计算库,用于编写涉及大量 tensor 操作的新算法。由于神经网络可以很容易地表示为计算图,因此它们可以使用 TensorFlow 作为 tensor 的一系列操作来实现。另外,tensor 是表示数据的 n 维矩阵。
TensorFlow 的特征
1.快速响应的结构
使用 TensorFlow,我们可以很容易地可视化图的每个部分,这在使用 Numpy 或 SciKit 时是做不到的。
2.灵活
TensorFlow 的一个非常重要的特性是,它的操作非常灵活。这意味着它具有模块性,可以让你把希望独立出来的部分分出来
3.容易训练
对于分布式计算来说,它很容易在 CPU 和 GPU 上训练。
4.并行神经网络训练
TensorFlow 提供了管道流,从这个意义上说,你可以训练多个神经网络和多个 GPU,这使得模型在大型系统上非常有效。
5.大型社区
不用说,它是由 Google 开发的,已经有一个庞大的软件工程师团队在不断地改进稳定性。
6.开源
这个机器学习库最好的一个特点是,它是开源的,任何人只要有连接互联网就可以使用它。
TensorFlow 被用在哪里?
你每天都在使用 TensorFlow,你使用的 Google Voice Search 或 Google Photos 等应用程序都是使用这个库开发的。
在 TensorFlow 创建的所有库都是用 C 和 C++编写的,但是,它有一个复杂的前端,是用 python 实现的。你的 python 代码将被编译,然后在使用 C 和 C++构建的 TensorFlow 分布式执行引擎上执行。
实际上,TensorFlow 的应用是无限的,这就是它美妙的地方。
2.Scikit-Learn
什么是 Scikit-Learn?
它是一个与 NumPy 和 SciPy 相关联的 python 库。它被认为是处理复杂数据的最佳库之一。
在这个库中进行了许多修改。其中一个修改是交叉验证特性,它提供了使用多个度量的能力。许多训练方法,如物流回归和最邻近算法,都没有得到什么改善。
Scikit-Learn 的特性
- 交叉验证:有多种方法可以检查不可见数据上受监督模型的准确性。
- 无监督学习算法:同样,在产品中有大量的算法——从聚类、因子分析、主成分分析到无监督神经网络
- 特征提取:用于从图像和文本中提取特征(例如一段文字)
Scikit Learn 被用在哪里?
它包含许多实现标准机器学习和数据挖掘任务的算法,如降维、分类、回归、聚类和模型选择。
3.Numpy
什么是 Numpy?
Numpy 被认为是 python 中最流行的机器学习库之一。
TensorFlow 和其他库在内部使用 Numpy 对 tensor 执行多个操作。数组接口是 Numpy 的最佳和最重要的特性。
Numpy 的特性
- 交互性:Numpy 非常容易理解和使用
- 数学性:使复杂的数学实现变得非常简单
- 直观:真正使编码变得容易,掌握概念也很容易
- 大量接口:广泛使用,因此有很多开源贡献者
Numpy 被用在哪里?
该接口可用于将图像、声音和其他二进制原始流表示为 n 维实数数组。
机器学习库的实现,拥有 Numpy 的知识对于全栈开发人员来说是很重要的。
4.Keras
什么是 Keras?
Keras 被认为是 python 中最酷的机器学习库之一。它提供了一种更容易表达神经网络的机制。Keras 还为编译模型、处理数据集、图形可视化等提供了一些最佳实用程序。
在后端,Keras 在内部使用 Theano 或 TensorFlow。也可以使用一些最流行的神经网络,如 CNTK。当我们将其与其他机器学习库进行比较时,Keras 的速度相对较慢,因为它使用后端基础设施创建计算图,然后利用它执行操作。Keras 的所有模型都很轻简。
Keras 的特征
- 它在 CPU 和 GPU 上都能顺利运行。
- Keras 支持几乎所有的神经网络模型——全连接、卷积、池化、循环、嵌入等。此外,这些模型可以结合起来构建更复杂的模型。
- Keras 本质上是模块化的,具有难以置信的表现力、灵活性和创新性研究的能力。
- Keras 是一个完全基于 python 的框架,它使调试和探索变得容易。
Keras 被用在哪里?
你已经在不断地与使用 Keras 构建的产品进行交互—Netflix、Uber、Yelp、Instacart、Zocdoc、Square 和许多其他公司都在使用它。它在初创企业中尤其受欢迎,初创企业将深度学习放在其产品的核心位置。
Keras 包含许多常用的神经网络构建块的实现,例如层、目标、激活函数、优化器和一系列工具,以使图像和文本数据的处理更加容易。
此外,它还提供许多预处理的数据集和预训练的模型,如 MNIST, VGG, Inception, SqueezeNet, ResNet 等。
Keras 也是深度学习研究人员的最爱。大型科学组织,特别是 CERN and NASA 的研究人员尤其偏爱 Keras。
5.PyTorch
什么是 PyTorch?
PyTorch 是最大的机器学习库,它允许开发人员以 GPU 的加速度执行 tensor 计算,创建动态计算图,并自动计算梯度。除此之外,PyTorch 还提供了丰富的 API 来解决与神经网络相关的应用程序问题。
这个机器学习库是基于 Torch 的,它是一个用 C 语言实现的开源机器库,在 Lua 中进行了封装。
此机器学习库(python)于 2017 年推出,自其问世以来,该库越来越受欢迎,并吸引了越来越多的机器学习开发人员。
PyTorch 的特性
- 端到端 Hybrid
一种新的混合前端,提供了易于使用和具有灵活性的 Eager Mode,同时为了速度,无缝过渡到 graph mode,在 C++运行环境中非常实用。
- 分布式训练
利用本地支持异步执行集体操作和点对点通信(Python 和 C++),优化研究和生产中的性能。
- python 优先
PyTorch 不是一个将 python 绑定到 C++框架的工具。它的构建是为了深入集成到 python 中,以便可以与流行的库和包(如 Cython 和 Numba)一起使用。
- 库和工具
一个由研究人员和开发人员组成的活跃社区已经建立了一个丰富的工具和库的生态系统,用于扩展 PyTorch 并支持从计算机视觉到强化学习等领域的开发。
PyTorch 被用在哪里?
PyTorch 主要用于自然语言处理等领域的应用程序。
它主要是由 Facebook 的人工智能研究小组开发的,Uber 的概率编程软件「Pyro」就建立在它的基础之上。
PyTorch 在很多方面都优于 TensorFlow,最近它得到了很多关注。
6.LightGBM
什么是 LightGBM?
梯度增强是最好的和最流行的机器学习(ML)库之一,它可以帮助开发人员使用重新定义的基本模型,即决策树来构建新的算法。因此,有专门的库可以快速有效地实现这种方法。
这些库包括 LightGBM, XGBoost 和 CatBoost。这些库之间存在相互竞争的关系,它们都有助于解决常见问题,可以以几乎相似的方式使用。
LightGBM 的特点
- 计算速度快,生产效率高。
- 直观,易于使用。
- 比其他许多深度学习库更快地训练。
- 在遇到 NaN 值和其他规范值时不会产生错误。
LightGBM 被用在哪里?
这个库提供了高度可扩展、优化和快速的梯度增强实现,这使得它在机器学习开发人员中很受欢迎。大多数机器学习全栈开发人员通过使用这些算法赢得了机器学习竞赛。
7.Eli5
什么是 Eli5?
通常,机器学习模型预测的结果并不准确,python 内置的机器学习库 Eli5 有助于克服这一挑战。它是可视化和调试所有机器学习模型的组合,并跟踪算法的所有工作步骤。
Eli5 的特点
此外,Eli5 还支持其他库,包括 xgboost、lightning、scikit-learn 和 sklearn-crfsite。所有上述库中额每一个都可以执行不同的任务。
Eli5 被用在哪里?
- 在短时间内需要进行大量计算的数学应用
- Eli5 在和其他 Python 包存在依赖关系的情况下发挥着至关重要的作用
- 在各个领域的传统应用程序实现新方法
8.SciPy
什么是 SciPy?
SciPy 是一个面向应用程序开发人员和工程师的机器学习库。但是,你仍然需要知道 SciPy 库和 SciPy 堆栈之间的区别。SciPy 库包含用于优化、线性代数、集成和统计的模块。
SciPy 的特点
- SciPy 库的主要特点是它是使用 Numpy 开发的,它的数组充分利用了 Numpy。
- 此外,SciPy 还使用其特定的子模块提供了所有有效的数值程序,如优化、数值积分和许多其他程序。
- 所有 SciPy 子模块中的所有功能都有具体的文档注释。
SciPy 被用在哪里?
SciPy 是一个使用 Numpy 来解数学函数的库。SciPy 使用 Numpy 数组作为基本数据结构,并附带用于科学编程中各种常用任务的模块。
SciPy 可以轻松地处理线性代数、积分(微积分)、常微分方程求解和信号处理等任务。
9.Theano
什么是 Theano?
Theano 是一个用于计算多维数组的计算框架机器学习库。它的工作原理与 TensorFlow 相似,但不如 TensorFlow 有效,因为它无法适应生产环境。
此外,Theano 也可以在与 TensorFlow 类似的分布式或并行环境中使用。
Theano 的特点
- 与 Numpy 紧密集成:能够在无编译函数中使用完整的 Numpy 数组
- 高效地使用 GPU:比 CPU 执行数据密集型计算要快得多
- 有效的符号区分:Theano 为具有一个或多个输入的函数求导数
- 速度和稳定性优化:即使在 x 非常小的情况下,也能求出 log(1+x)的正确答案。这只是一个可以证明 Theano 稳定性的例子
- 动态 C 代码生成:比以前更快地评估表达式,从而大大提高效率
- 广泛的单元测试和自验证:检测和诊断模型中多种类型的歧义和错误
Theano 被用在哪里?
Theano 表达式的实际语法是符号化的,这对于习惯于常规软件开发的初学者来说是很不方便的。具体来说,表达式是以抽象的方式定义、编译的,然后直接用于计算。
它是专门为处理深度学习使用的大型神经网络算法所需的计算而设计的。它是同类库中最早的一个(在 2007 年就开始开发了),被认为是深度学习研究和开发的行业标准。
Theano 目前正被用于多个神经网络项目中,而且随着时间的推移,Theano 的普及率也在不断提高。
10.Pandas
什么是 Pandas?
Pandas 是 Python 中的一个机器学习库,它提供高级的数据结构和各种各样的分析工具。这个库的一个重要特性是能够使用一个或两个命令转换复杂的数据操作。Pandas 有许多内置的分组、数据组合、过滤和时间序列功能的函数。
Pandas 的特征
Pandas 确保了整个数据处理的过程更加容易。对诸如重索引、迭代、排序、聚合、连接和可视化等操作的支持是 Pandas 的特色亮点之一。
Pandas 被用在哪里?
目前,Pandas 库的版本较少,其中包括数百个新功能、错误修复、增强和 API 更改。Pandas 的改进在于它能够对数据进行分组和排序,为使用的方法选择最适合的输出,并为执行自定义类型的操作提供支持。
当使用 Pandas 的时候,数据分析占了很大的比重。但是,当与其他库和工具一起使用时,Pandas 确保了高性能和良好的灵活性。
python 中的 10 大顶级 机器学习库的介绍就到这里啦,希望本文能够帮助你开始学习 python 中可用的库。
20个必不可少的Python库也是基本的第三方库
今天将介绍20个常用工具的Python库,我相信你看完之后也会觉得离不开它们。他们是:
Requests.Kenneth Reitz写的最富盛名的http库。每个Python程序员都应该有它。
Scrapy.如果你从事爬虫相关的工作,那么这个库也是必不可少的。用过它之后你就不会再想用别的同类库了。
wxPython.Python的一个GUI(图形用户界面)工具。我主要用它替代tkinter。你一定会爱上它的。
Pillow.它是PIL(Python图形库)的一个友好分支。对于用户比PIL更加友好,对于任何在图形领域工作的人是必备的库。
SQLAlchemy.一个数据库的库。对它的评价褒贬参半。是否使用的决定权在你手里。
BeautifulSoup.我知道它很慢,但这个xml和html的解析库对于新手非常有用。
Twisted.对于网络应用开发者最重要的工具。它有非常优美的api,被很多Python开发大牛使用。
NumPy.我们怎么能缺少这么重要的库?它为Python提供了很多高级的数学方法。
SciPy.既然我们提了NumPy,那就不得不提一下SciPy。这是一个Python的算法和数学工具库,它的功能把很多科学家从Ruby吸引到了Python。
matplotlib.一个绘制数据图的库。对于数据科学家或分析师非常有用。
Pygame.哪个程序员不喜欢玩游戏和写游戏?这个库会让你在开发2D游戏的时候如虎添翼。
Pyglet.3D动画和游戏开发引擎。非常有名的Python版本Minecraft就是用这个引擎做的。
pyQT.Python的GUI工具。这是我在给Python脚本开发用户界面时次于wxPython的选择。
pyGtk.也是Python GUI库。很有名的Bittorrent客户端就是用它做的。
Scapy.用Python写的数据包探测和分析库。
pywin32.一个提供和windows交互的方法和类的Python库。
nltk.自然语言工具包。我知道大多数人不会用它,但它通用性非常高。如果你需要处理字符串的话,它是非常好的库。但它的功能远远不止如此,自己摸索一下吧。
nose.Python的测试框架。被成千上万的Python程序员使用。如果你做测试导向的开发,那么它是必不可少的。
SymPy.SymPy可以做代数评测、差异化、扩展、复数等等。它封装在一个纯Python发行版本里。
IPython.怎么称赞这个工具的功能都不为过。它把Python的提示信息做到了极致。包括完成信息、历史信息、shell功能,以及其他很多很多方面。一定要研究一下它。
Python 四大主流 Web 编程框架
本文内容摘录自《Python高效开发实战——Django、Tornado、Flask、Twisted》一书。该书分为三部分:第1部分是基础篇,带领初学者实践Python开发环境和掌握基本语法,同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地进行学习;第2部分是框架篇,学习当前最流行的Python Web框架,即Django、Tornado、Flask和Twisted,达到对各种Python网络技术融会贯通的目的;第3部分是实战篇,分别对4种框架进行项目实践,利用其各自的特点开发适用于不同场景的网络程序。
目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django、Tornado、Flask、Twisted。
网络框架及MVC架构
所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议、线程、进程等方面。这样能大大提高开发者的工作效率,同时提高网络应用程序的质量。
在目前Python语言的几十个开发框架中,几乎所有的全栈网络框架都强制或引导开发者使用MVC架构开发Web应用。所谓全栈网络框架,是指除了封装网络和线程操作,还提供HTTP栈、数据库读写管理、HTML模板引擎等一系列功能的网络框架。本文重点讲解的Django、Tornado和Flask是全栈网络框架的典型标杆;而Twisted更专注于网络底层的高性能封装而不提供HTML模板引擎等界面功能,所以不能称之为全栈框架。
MVC(Model-View-Controller)模式最早由Trygve Reenskaug在1978年提出,在20世纪80年代是程序语言Smalltalk的一种内部架构。后来MVC被其他语言所借鉴,成为了软件工程中的一种软件架构模式。MVC把Web应用系统分为3个基本部分。
模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。Model不依赖于View和Controller,它们可以在任何时候调用Model访问数据。有些Model还提供了事件通知机制,为在其上注册过的View或Controller提供实时的数据更新。
视图(View):负责数据的显示和呈现,View是对用户的直接输出。MVC中的一个Model通常为多个View提供服务。为了获取Model的实时更新数据,View应该尽早地注册到Model中。
控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。当用户的输入导致View发生变化时,这种变化必须是通过Model反映给View的。在MVC架构下,Controller一般不能与View直接通信,这样提高了业务数据的一致性,即以Model作为数据中心。
这3个基本部分互相分离,使得在改进和升级界面及用户交互流程时,不需要重写业务逻辑及数据访问代码。MVC架构如图1所示。
MVC架构图
注意:MVC在除Python外的其他语言中也有广泛应用,例如VC++的MFC、Java的Structs及Spring、C#的.NET开发框架,读者应该有深刻的体会。 4种Python网络框架:Django、Tornado、Flask、Twisted
接下来带领大家学习当今主流的4种Python网络框架。
企业级开发框架——Django
Django于2003年诞生于美国堪萨斯(Kansas)州,最初用来制作在线新闻Web站点,于2005年加入了BSD许可证家族,成为开源网络框架。Django根据比利时的爵士音乐家Django Reinhardt命名,作者这样命名Django意味着Django能优雅地演奏(开发)功能丰富的乐曲(Web应用)。
它是当前Python世界里最负盛名且最成熟的网络框架。最初用来制作在线新闻的Web站点,目前已发展为应用最广泛的Python网络框架。Django的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统,但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。
Django框架的特点
相对于Python的其他Web框架,Django的功能是最完整的,Django定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着Django模块之间紧密耦合,开发者需要学习Django自己定义的这一整套技术。Django的主要特点如下。
完善的文档:经过10多年的发展和完善,Django有广泛的应用和完善的在线文档,开发者遇到问题时可以搜索在线文档寻求解决方案。 集成数据访问组件:Django的Model层自带数据库ORM组件,使开发者无须学习其他数据库访问技术(dbi、SQLAlchemy等)。 强大的URL映射技术:Django使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。 后台管理系统自动生成:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。 错误信息非常完整:在开发调试过程中如果出现运行异常,则Django可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置引用等,这样可以使开发者马上改正错误。
Django的组成结构
Django是遵循MVC架构的Web开发框架,其主要由以下几部分组成。
管理工具(Management):一套内置的创建站点、迁移数据、维护静态文件的命令工具。 模型(Model):提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。 视图(View):Django的视图层封装了HTTP Request和Response的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等。 模板(Template):是一套Django自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式。 表单(Form):通过内置的数据类型和控件生成HTML表单。 管理站(Admin):通过声明需要管理的Model,快速生成后台数据管理网站。
高并发处理框架——Tornado
Tornado是使用Python编写的一个强大的可扩展的Web服务器。它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。Tornado作为FriendFeed网站的基础框架,于2009年9月10日发布,目前已经获得了很多社区的支持,并且在一系列不同的场合中得到应用。除FriendFeed和Facebook外,还有很多公司在生产上转向Tornado,包括Quora、Turntable.fm、Bit.ly、Hipmunk及MyYearbook等。
相对于其他Python网络框架,Tornado有如下特点。
完备的Web框架:与Django、Flask等一样,Tornado也提供了URL路由映射、Request上下文、基于模板的页面渲染技术等开发Web应用的必备工具。 是一个高效的网络库,性能与Twisted、Gevent等底层Python框架相媲美:提供了异步I/O支持、超时事件处理。这使得Tornado除了可以作为Web应用服务器框架,还可以用来做爬虫应用、物联网关、游戏服务器等后台应用。 提供高效HTTPClient:除了服务器端框架,Tornado还提供了基于异步框架的HTTP客户端。 提供高效的内部HTTP服务器:虽然其他Python网络框架(Django、Flask)也提供了内部HTTP服务器,但它们的HTTP服务器由于性能原因只能用于测试环境。而Tornado的HTTP服务器与Tornado异步调用紧密结合,可以直接用于生产环境。 完备的WebSocket支持:WebSocket是HTML5的一种新标准,实现了浏览器与服务器之间的双向实时通信。 因为Tornado的上述特点,Tornado常被用作大型站点的接口服务框架,而不像Django那样着眼于建立完整的大型网站,所以本章着重讲解Tornado 的异步及协程编程、身份认证框架、独特的非WSGI部署方式。
支持快速建站的框架——Flask
Flask是Python Web框架族里比较年轻的一个,于2010年出现,这使得它吸收了其他框架的优点,并且把自己的主要领域定义在了微小项目上。同时,它是可扩展的,Flask让开发者自己选择用什么数据库插件存储他们的数据。很多功能简单但性能卓越的网站就是基于Flask框架而搭建的,比如http://httpbin.org/就是一个功能简单但性能强大的HTTP测试项目。Flask是一个面向简单需求和小型应用的微框架。
相对于其他Python语言的Web框架而言,Flask的特点可以归结如下。
1、内置开发服务器和调试器
网络程序调试是在将编制好的网站投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。有经验的开发者都知道,这是保证网站系统能够正式应用的必要步骤。
Flask 自带的开发服务器使开发者在调试程序时无须再安装其他任何网络服务器,比如Tomcat、JBoss、Apache等。Flask默认处于调试状态,使得运行中的任何错误会同时向两个目标发送信息:一个是Python Console,即启动Python程序的控制台;另一个是HTTP客户端,即Flask开发服务器将调试信息传递给了客户端。** **
2、与Python单元测试功能无缝衔接
单元测试是对最小软件开发单元的测试,其重点测试程序的内部结构,主要采用白盒测试方法,由开发人员负责。单元测试的主要目标是保证函数在给定的输入状态下,能够得到预想的输出,在不符合要求时能够提醒开发人员进行检查。
Flask提供了一个与Python自带的单元测试框架unitest无缝衔接的测试接口,即Flask对象的test_client()函数。通过test_client()函数,测试程序可以模拟进行HTTP访问的客户端来调用Flask路由处理函数,并且获取函数的输出来进行自定义的验证。
3、使用Jinja2模板
将HTML页面与后台应用程序联系起来一直是网站程序框架的一个重要目标。Flask通过使用Jinja2模板技术解决了这个问题。Jinja2是一个非常灵活的HTML模板技术,它是从Django模板发展而来的,但是比Django模板使用起来更加自由且更加高效。Jinja2模板使用配制的语义系统,提供灵活的模板继承技术,自动抗击XSS跨站攻击并且易于调试。
4、完全兼容WSGI 1.0标准
WSGI(Web Server Gateway Interface)具有很强的伸缩性且能运行于多线程或多进程环境下,因为Python线程全局锁的存在,使得WSGI的这个特性至关重要。
WSGI已经是Python界的一个主要标准,各种大型网路服务器对其都有良好的支持。
WSGI位于Web应用程序与Web服务器之间,与WSGI完全兼容使得Flask能够配置到各种大型网络服务器中。
5、基于Unicode编码
Flask是完全基于Unicode的。这对制作非纯ASCII字符集的网站来说非常方便。
HTTP本身是基于字节的,也就是说任何编码格式都可以在HTTP中传输。但是,HTTP要求在HTTP Head中显式地声明在本次传输中所应用的编码格式。在默认情况下,Flask会自动添加一个UTF-8编码格式的HTTP Head,使程序员无须担心编码的问题。
底层自定义协议网络框架——Twisted
以上讲到的3个Python Web框架都是围绕着应用层HTTP展开的,而Twisted是一个例外。Twisted是一个用Python语言编写的事件驱动的网络框架,对于追求服务器程序性能的应用,Twisted框架是一个很好的选择。
Twisted是一个有着10多年历史的开源事件驱动框架。Twisted支持很多种协议,包括传输层的UDP、TCP、TLS,以及应用层的HTTP、FTP等。对于所有这些协议,Twisted提供了客户端和服务器方面的开发工具。
Twisted框架的历史悠久,其主要发行版本都以Python 2为基础,最新的版本为基于Python 2.7的Twisted-15.4.0。Twisted社区正在开发基于Python 3的版本,但目前为止尚没有基于Python 3的Twisted稳定发行版。
Twisted是一个高性能的编程框架。在不同的操作系统平台上,Twisted利用不同的底层技术实现了高效能通信。在Windows中,Twisted的实现基于I/O完成端口(IOCP,Input/Output Completion Port)技术,它保证了底层高效地将I/O事件通知给框架及应用程序;在Linux中,Twisted的实现基于epoll技术,epoll是Linux下多路复用I/O接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 在开发方法上,Twisted引导程序员使用异步编程模型。Twisted提供了丰富的Defer、Threading等特性来支持异步编程。
欲进一步了解Python四大主流网络编程框架的编程方法、项目实战,可参见《Python高效开发实战——Django、Tornado、Flask、Twisted》一书。