PyCon China 2012上海站回顾

上周末,在上海、北京两地同时举行了PyCon China 2012大会,且在多地进行了直播。本次会议由各地GDG、TopGeek和CPyUG多个社区联合举办,上海站作为主会场,为期两天的会议内容非常丰富。

正式开场前,TopGeek创始人之一陈世欣介绍了赞助商、主办方以及各地的志愿者,概述了两天的会议内容,同时还向大家展示了Python在全球范围内的发展情况,以及社区情况,尤其是华蠎的订阅人数即将超过10000,这可能是Google Goups上最大的技术社区。随后,播放了两段简短的视频,一段是来自居住在日本的华人蟒友张若愚(《Python科学计算》的作者)专门为大会录制的视频,另一段是Python之父Guido在今年PyCon US大会上的演讲。

本次大会与去年的大会有很多相似之处,例如正式演讲都由Python社区中著名的“沈游侠”开场,本次沈崴为大家带来的《Python产品构建与发布指南》介绍了如何更好地用Python进行跨平台开发。有网友评价沈游侠的演讲点子很新,内容也很有料,就是难度有点大。

沈崴建议进行跨平台开发,可以先在Linux/Unix上进行开发,哪怕开发的是Windows上的程序,因为通常前者环境下开发的东西天然就是跨平台的。现场两位游戏方面的演讲嘉宾也分别表示自己正在使用或者知道跨平台方面的内容。他对比了Unix和Windows下一个完整的应用的目录结构,指出本次分享的内容主要关注于可执行文件和库。一般情况下,Windows并不认为Python程序是可执行的,因此就有了编译为“可执行程序”的问题,比如很常见的py2exe,还有目前非常流行的Cython和PyPy。

除了将Python程序编译为“可执行程序”,还可以使用Cython,将Python编译为库(so或dll),PyPy也有同样的功能,只是PyPy目前缺乏对多个Entry Point的支持。但是,目前不建议使用Python进行嵌入式开发。Python程序也可作为服务运行在后台,Unix下有各种方式可以将程序放到后台作为Deamon运行;Windows下可以使用pywin32,或者索性把程序放到托盘(Systray)里,PySide就能通过少量代码实现该功能。

在程序界面方面,Unix程序员倾向于先把东西做成库,然后变成CLI(命令行方式),最后用一个GUI通过Pipe或Socket将它封装一下。而Windows程序员通常一开始就会做一个GUI的程序。Python中有不少GUI库可供选择,比如tk、gtk、PySide(也就是QT)、wxPython和PyGame。除了这些传统的GUI库,还可以用Web的方式来开发一个GUI程序,先写一个Web服务器,再写一个GUI程序,其中嵌入WebKit,由它去访问网页。可以通过OnBeforeNavigate截取用户的URL跳转,甚至直接用AJAX进行控制,而最简单的方式是让JavaScript和Python直接互相调用。沈崴讲到了他主导的两个开源项目,仍在开发中的Liubao可以方便地实现JavaScript和Python的相互调用,而著名的Eurasia也即将发布3.2版本,比3.1增加了File IO、Pipe等方面的内容。

随后,土豆网李小红的演讲《让程序运行更快》也与去年大会上黄冬的演讲类似,技术含量十足,只是内容与Python关系不是很大,但还是让听众大呼过瘾。他先从Varnish比Squid快说起,详细对比了Squid和Varnish在各种命中和不命中时的工作情况。Squid在诞生之时,OS还没有VM管理功能,所以自己做了一套管理机制,与现代OS的VM管理有冲突;而Varnish则利用了现代OS自身的管理机制。Varnish更快的原因主要在于:

  • 多线程,有效利用多核和CPU资源
  • 内存访问和复制次数少
  • 处理请求系统调用次数少
  • 有效利用操作系统虚拟内存

有这样的效果,除了硬件的发展,很大程度上也与现代OS的进步有关:

  • 从poll到epoll
  • 零内存复制的sendfile接口
  • gather io减少系统调用——readv、writev
  • 中断bottom half处理演进
  • 操作系统page cache

虽然李小红本人并不从事Python开发,但是土豆在日常工作的很多地方都用到了Python。比如土豆的用户体验分析,短时间内进行百G日志分析,就结合了Shell/Python/awk/c,每次针对半个小时的日志分析,综合了管道、临时文件等众多技术。他为大家介绍了Python的Dictionary实现,使用Open Addressing解决Hash冲突;结构体中自带8个桶的小Hash表;保持最多80个不同的Dictionary,这加快了Dictionary的生成和释放;删除元素时不会缩减桶数量,减少内存访问次数。针对Python解释器,由于存在大锁、多线程效果差的问题,可以考虑向Java VM或者Linux Kernel学习。他建议大家在优化程序时能抱着这样的想法:

  • 多度量,多思考
  • 少改动
  • 找到改动的支点(不到20%的努力能带来80%的效果)

本次大会还出现了外国演讲嘉宾的身影,比如OpenERP专家Eric CAUDAL先生,他为大家介绍了最新的OpenERP 7中的众多特性。由于在做的听众对OpenERP的了解不多,所以他先简单介绍了一下OpenERP——一款非常专业的用Python开发的开源ERP软件。OpenERP目前的发展势头良好,且新版本带来了很多出众的功能,CAUDAL先生的演示非常吸引人。一些嘉宾表示,虽然OpenERP和以前的Plone有很多相似之处,但它让人眼前一亮,这让人们对Python开发复杂系统更有信心了。 OpenERP不仅是个ERP软件,也是一套值得学习的框架,新版本在框架方面也做了一些改动,第二天的《人人可以化半小时开发一个全功能 OpenERP 模块》也很好地体现了这点。

既然是Python爱好者的大会,自然少不了纯技术的话题,许智翔的《元编程在 Redis ORM 中的应用》就Hack味十足,从何为元编程入手,层层深入,最后讲到了其在redisobj ORM框架中的应用,技术深度让人折服。无独有偶,上届的演讲嘉宾潘俊勇本次也带来了一个与Redis相关的主题,可见在Python项目中使用Redis还是很普遍的。

游戏是每次PyCon China大会中都少不了的内容,除了老朋友林伟、赖勇浩和王健纷纷带来了自己的主题,还有很多新朋友介绍了自己在Python游戏开发方面的经验。本次的游戏主题包括:

  1. 《实战游戏客户端》
  2. 《网游开发中的 Python 组件》
  3. 《自动化即时战斗游戏解决方案》
  4. 《Python如何帮助「逆转三国」获得成功》
  5. 《网页游戏的跨界开发》

你可能感兴趣的:(PyCon China 2012上海站回顾)