本站分享:AI、大数据、数据分析师培训认证考试,包括:Python培训Excel培训Matlab培训SPSS培训SAS培训R语言培训Hadoop培训Amos培训Stata培训Eviews培训

Python 在Web 2.0网站的应用_python web应用

python培训 cdadata 3251℃

Python 在Web 2.0网站的应用

关键词:python web应用 python开发web应用 python web开发
洪大侠有些遗憾在QCon上面由于时间的限制没能将后面Python实际应用部分的例子讲解透彻。所以这次略微简化了些前面的介绍部分,直接引入那些讲述了Python语言最优秀部分的特性是如何在实战中得到应用的。不过需要注意的是,如果是对于这些特性没有简单了解的Python初学者,欣赏这部分的乐趣依然存在但是可能会降低。而鉴于洪教授的Slides上,这部分没有什么详尽的文字说明,所以自己的记录旨在能够帮助大家作为学习Slides部分的一些简单提示。欢迎大家与Slides一起来配合学习。

Python的介绍

  • 目标:提高开发效率,降低开发成本
  • 代码比例:Slides中给出的比例描述的是豆瓣所有项目中的比例,如果只计算网站前端部分的话,那么Python的比例大概有70%多。

为什么使用Python?

  • 简单易学、开发迅速、易于协作。着重说了第三点”易于协作”。因为如果单独就开发效率来讲Perl的效率也很高,但是Python语言的特性可以避免强烈的个人风格,从而更适合团队开发。
  • 部署方便:三条语句完成上线功能
  • 适用面广:前台后台各种应用
  • 资源丰富:内置电池,应有尽有的库可以选择

概述一下讲解的Python的一些优点以及相应的库或工具

  • 简单的Web开发代码展示-Douban后台的WebService都是用Web.py开发的
  • 使用更新颖的Flask框架,代码写起来甚至比Web.py更简单
  • Python开发Web简单得益于WSGI,该标准将一个请求分解为不同的中间件来进行处理。当然造成 Python Web Framework众多的原因也是因为这个。
  • nose-使单元测试变得简单
  • numpy-用于数据分析
  • iPython-好用的命令界面扩展,幻灯中演示了直接在iPython中通过数据来绘图
  • virtualenv-方便部署和建立一个干净的Python环境
  • Python的速度不快,基本和Perl一个量级-用C扩展:Douban用的多的是 PyRex/Cython,用类似于Python的语法去写C的扩展
  • 哲学上和其他语言的差异:做一件事情只有一种方法(Py) vs 做一件事情可以有多种方法(Perl)
  • Pythonic-http://bit.ly/pyzencn

利用Python的语言特性简化开发

案例零:本机和线上配置的不同,如何方便解决

  • 使用.py文件作为配置文件,在使用时将该文件 import 进入程序。

案例一:网站页面权限控制的Pythonic解决方案

  • 使用Decorator把权限处理的代码部分抽象出来
  • Decorator和四人帮中的描述的装饰器模式并不完全对等
  • Py中的函数可以当作对象使用
  • 使用__call__来简化代码

案例二:从队列中提取信息调用相应的函数

  • 原始的代码设计需要在代码中放入大段的If.Else来进行处理
  • 被装饰的函数,先换个名字
  • 将函数序列化后存入队列中,Work通过名称找到相应的模块和函数执行
  • 现场观众提出的问题是,在get_attr这部分的性能损耗如何?答:可以忽略,Python内部有对这方面的考虑
  • 在生产环境中,豆瓣使用RabbitMQ作为队列系统

案例三:Memcache

  • 用的是Python-libmemcached(由豆瓣开源的),在这个页面http://code.google.com/p/memcached/wiki/Clients#Python 可以查到不同库的比较。
  • 变化的key使用decorator如何处理?
  • 传进去一个可以解释的表达式
  • 使用inspect.getargspec
  • get_key这个返回值,是一个函数,产生memcache的key时使用的
  • hint中说的是生成KEY的方式:如果你有更好的方式,欢迎发给Douban,这个会为应聘豆瓣加很多分值

案例四:使用迭代器减少不必要的性能开销

  • iterator和generator
  • itertools供迭代器所使用的库
  • 通过迭代器来减少遍历时数据库访问产生的性能开销
  • imerge把一组迭代器按照顺序进行排序(不在标准库中)
  • generator是简化代码的利器

案例五:序列化操作时间优化,元类操作

  • 简单对象,需要处理的量太大(豆瓣的收藏对象)反序列化的速度太慢,造成瓶颈
  • CPickle vs Marshal 性能对比,Marshal的性能大约提升7倍,同时空间还有43%的节省
  • Marshal只能处理内部类型,怎么才能使用其来处理Python中的自定义对象呢?
  • 从Python 2.6中增加的namedtuple得到启发,使用类似的方法来完成这个工作
  • 首先要明确Python中类的观念,类也是从元类派生出来的
  • 使用元类,在实例化这个类的过程中进行一个序列化该对象信息的操作,而这部分可以很方便地被Marshal所使用
  • 需要注意的是:Meta操作如果处理不当,容易被滥用,从而导致很多可维护性上的问题。推荐只将其用于框架类的实现上,而避免在应用层运用此类实现。

案例六:Descriptor的简单讲解

  • 使用 Descriptor
  • 将对应变量名称作为类中的属性

案例七:让urllib库实现通过代理翻墙

  • 使用 Monkey Patch 方法来解决这个问题

Python的一些实现:

  • Stackless Python:微线程,类似Erlang,高效并行
  • IronPython,PyPy:据说效率都已经超过CPython了

Q&A环节:

  • 关于框架的选择问题:历史原因,如果现在从头开发新的网站,使用现代化框架
  • 变量命名规范:遵守PEP8规范,尽管不是必须
  • BeansDB应用于:图片、MP3、大文本字段

转载请注明:数据分析 » Python 在Web 2.0网站的应用_python web应用

喜欢 (0)or分享 (0)