如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

PyCon China 2012 上海站回顾

  • 2012 年 10 月 24 日
  • 本文字数:2451 字

    阅读完需:约 8 分钟

上周末,在上海、北京两地同时举行了 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. 《网页游戏的跨界开发》
2012 年 10 月 24 日 06:383152
用户头像

发布了 135 篇内容, 共 54.8 次阅读, 收获喜欢 42 次。

关注

评论

发布
暂无评论
发现更多内容

充值满赠,IM+RTC+X 全通信服务「回馈季」开启

融云 RongCloud

如何使用物联网低代码平台进行服务管理?

AIRIOT

低代码 物联网 低代码开发平台 低代码,项目开发

设计电商秒杀系统

流火

居家办公没有“血泪史”| 社区征文

穿过生命散发芬芳

居家办公 6月月更 初夏征文

ElasticSearch从入门到精通:Logstash妙用

Jackpop

墨天轮沙龙 | 清华乔嘉林:Apache IoTDB,源于清华,建设开源生态之路

墨天轮

数据库 国产数据库 apache 社区 Apache IoTDB

1 分钟 Serverless 搭建你的首个个人网站(完成就送猫超卡)

阿里巴巴云原生

阿里云 Serverless 云原生 网站

小程序容器技术,促进园区运营效率提升

Speedoooo

智慧园区 小程序容器 园区运营

联想YOGA 27 2022,超强配置全面升级

Geek_2d6073

程序员女友给我做了一个疲劳驾驶检测

华为云开发者联盟

人工智能 疲劳驾驶检测

盘点华为云GaussDB(for Redis)六大秒级能力

华为云开发者联盟

数据库 后端 华为云

ABAP-发布Restful服务

桥下本有油菜花

abap

wallys/WiFi 6 (802.11ax) 4×4 MU-MIMO 5GHz QCN9074 Single Band Wireless Module

wallys-wifi6

ElasticSearch从入门到精通:基础知识

Jackpop

NLP 论文领读|文本生成模型退化怎么办?SimCTG 告诉你答案

澜舟孟子开源社区

人工智能 自然语言处理 机器学习 nlp 文本生成

ElasticSearch从入门到精通:数据导入

Jackpop

“阿里爸爸”最新Java面试指南,基础+框架+数据库+系统设计+算法

Java全栈架构师

Java spring 程序员 面试 架构设计

CODING 正式入驻腾讯会议应用市场!

CODING DevOps

Rust 如何实现依赖注入?

非凸科技

依赖注入 库 Trait 对象 编程语言‘ public

为什么越来越多的人选择云渲染?

Finovy Cloud

服务器 渲染 云渲染

为什么一定要从DevOps走向BizDevOps?

阿里云云效

阿里云 DevOps 研发 BizDevOps

ElasticSearch从入门到精通:常用操作

Jackpop

wallys/WiFi 6 (802.11ax) 4×4 MU-MIMO 2.4GHz QCN9074 Single Band Wireless Module

wallys-wifi6

【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台

Alluxio

人工智能 互联网 金融 科技 电信

全技术栈、全场景、全角色云原生系列培训重磅首发,助力企业打造硬核云原生技术团队

York

容器 云原生 IT建设 技术培训 开发运维

实践GoF的23种设计模式:装饰者模式

华为云开发者联盟

开发 对象 装饰者模式

先写API文档还是先写代码?

Liam

Java 前端 Postman 后端开发 后端技术

GameFi链游系统开发NFT技术

薇電13242772558

NFT gamefi

NFT挖矿游GameFi链游系统开发搭建

薇電13242772558

智能合约 NFT

LeaRun.Java可视化拖拽编辑的BI大屏

力软低代码开发平台

全文手敲代码,教你用Java实现扫雷小游戏

华为云开发者联盟

Java

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

PyCon China 2012上海站回顾_Python_丁雪丰_InfoQ精选文章