本文为 PyChina 和「编程派」联合首发,作者为 EarlGrey。「编程派」是一个专注 Python 学习交流的微信公众号。
9 月 25 日,第六届 PyCon China 大会在深圳召开。这是这次大会的第二站活动,第一站已在上海成功举办。据官方介绍,PyCon China 过去 5 年已经在北京、上海、广州、珠海、杭州等地举办过十几次大会,影响达数万 Python 开发者。
这也是笔者接触 Python 近两年以来,第一次参加该大会。虽然此前在社区里听说了许多关于去年大会的负面言论,大多谈到广告太多,今年组织者在这方面做了不错的改进。至少从深圳场的情况来看,干货挺多。
深圳站视频及PPT,请在公众号后台回复”pysz“,获取分享链接。
1. 潘俊勇:脚本化及可视化编程
潘俊勇是一位 Python 老兵,方向是企业应用开发。在当天的分享中,他结合自身的工作经验,指出了当前应用开发存在的问题。
他认为,目前是互联网的“大航海”时代,技术创新的速度很快,后端框架每 5 年一变,前端 web 框架更是半年一变。与此同时,技术发展变得越来越复杂,开发周期更长,沟通管理的成功更高,应用的维护更加复杂。而且现在行业很热,开发人员薪资高,导致大量菜鸟都想转入开发(笔者也曾经这样想过)。
由于近两年云计算的快速发展,逐渐开始出现一种云端一体的开发方式,让应用开发回归简单,甚至可以做到无栈开发。其中一个趋势,就是可视化编程。
基于 PaaS 平台及其提供的各种 API 服务,可视化、脚本化开发成为可能。API 的全面开放,完全可以处理用户管理、消息服务、日志等后端功能,免去后端开发的需要。这样的优势是开发速度快,专注于产品,而不是仅仅写代码。
他以 Blockly 为例说明了可视化编程的好处。Blockly 是谷歌推出的一款可视化编程编辑器库,可以将图形化的程序翻译成 js、dart、Python 等多种语言。目前主要应用于编程学习领域,尤其是 5-7 岁低龄儿童学习编程。
最后,他之处,未来技术的门槛会越来越低,需要更懂产品的 Creator,而不是只知道编程的 Geek。
2. 丁来强:Python Hooking Technology
丁来强是美国顶尖大数据公司Splunk的资深 Python 工程师,拥有 10 多年的工作经验。在上海站,他分享了如何使用 Python 进行高效大数据工作流与任务调度。而在深圳场,他带来了同样精彩的 Hooking 技术分享,演示了许多平常使用较少但却非常奇妙的功能。
在他看来,Hooking 技术在 Python 中可以从以下四个层面进行应用:
- 对象和可变性
- 系统层面的 hook
- 语言层面的 hook
- 解释器层面的 hook
Hooking 技术的使用场景也非常多,可以用于 monkey pathcing,做单元测试,错误处理,甚至是一些简单的自动代码修复。此外,还可以使用 hooking 技术对代码进行动态分析,如性能分析、冲突检查等。
在演讲过程中,丁来强对上述使用场景给出了大量的代码实例,看的非常过瘾。详细的情况请回复关键词“pysz”下载相关的 PPT。
上述这些 hooking 技术,都是 Python 设计时就提供的灵活性支持,而非大家所理解的 hack 技术。这点在问答环节丁来强也进行了特别强调。
3. 李力:腾讯云的 Python 实践
这是当天上午的最后一个演讲。嘉宾是来自腾讯云的布道师、CVM技术负责人李力。据说这是他第一次参加这样的公开活动,也是第一次在外部介绍 Python 在腾讯云的实践。
腾讯是一家大量使用 C++ 的公司,讲者当初也是作为 C++ 程序员进入该公司的。2007 年,开始接触了 Python,很快就将其认定为一门可以”带你装逼带你飞“的语言。出于对 Python 在云计算方面的信心,李力从 2012 年开始在腾讯云推广使用 Python。
推广初期碰到了一定的阻力,这点对于任何想在公司推广新技术的人来说都是无法避免的。针对领导们的担忧,李力强调了在公有云中使用 Python 的诸多优势:
- 与 Linux 系统天然贴合,系统编程 API 与 glibcc 保持一致,以前的工具箱仍然适用。
- 是能够运行的伪代码,开发效率得到极大提升。
- 容易与 C/C++交互,使用 ctypes 可以很方便地调用 C 代码。
- 更容易保持项目的整洁。
基于这些考虑,腾讯云开始慢慢尝试引入 Python。首先就是改造接入层,使用 Flask + uWSGI + Nginx 改造了旧的 CGI 接口,使得开发工作更加简单,接口更加现代化。
另外,腾讯云还将 Python 用于系统编程,开发了公有云上的宿主机包管理工具。据说这个工具上线几年来运行都没有出什么问题。一般开发者很少有将 Python 用于系统编程的,腾讯云之所以选择 Python,是由于其标准库与 POSIX 规范天然贴合,具备优秀的文本处理和分析能力,而且还有完备的网络功能等原因。
接下来,他还介绍了云调度系统的框架,并分享了在大规模系统中的应用 Python 技术的一些坑。
另外,总的来看,这场演讲可能是现场笑声最多的一次。
4. River:QPython - Python for Android
听 River 的分享之前,我以为 QPython 只是一个让我在安卓手机上练习写 Python 代码的 APP 而已。但是听完之后,我觉得自己完全想错了。QPython 的野心是做一个生态。
一开始,River 通过一个利用 QPython 调用翻译 API 的示例,演示了一般程序员的具体使用场景。接着他介绍了自己开发 QPython 的由来。
QPython 的团队中目前只有两个人左右,而拥有的国内外用户已经达百万。这一切都起源于 River 等人对 Android Studio 编译速度的不满。在 River 看来,并不是所有的 APP 都需要原生的速度,很多时候开发速度更重要。
目前 QPython 正在逐步的开源当中,功能也比刚开始时丰富了许多。针对用户反馈的手机上编码不方便的问题,QPython 团队推出了 qpy.io 服务(国外服务器,国内访问受限)。通过该服务,用户可以在浏览器中在线编辑手机上的代码,然后在手机上进行调试,而且支持在线导出 APK。
据介绍,QPython 目前支持多种 APP 开发库,如 Bottle(内置)、Django、Flask 和 Kivy 等。同还可以通过 QSL4A,让开发者充分利用安卓手机的特性。
谈到 QPython 的未来,River 表示非常有信心,未来将在国内建立服务,开放第三方库提交,并开发 QScript 市场。
5. 何世友:ASGI 草案,Python 终于等到了
何世友是科技媒体爱范儿的 CTO。经常看爱范儿上的文章,只是没想到爱范儿使用的语言也是 Python。这场开始的大概是下午两点多的样子。说实话那个时候大家都挺困的。何世友一上来,据说就用了赖勇浩教的一招演讲技巧,让睡意浓浓的现场观众们起立为他“鼓掌”了 5 秒钟。
他的演讲主题是「ASGI 草案,Python 终于等到了」。ASGI 的全称是异步服务网关接口(Asynchronous Server Gateway Interface),是今年才由 Django 工作组提出的一个协议,目前还属于草案阶段。国内关注该协议的人非常少,几乎没有相关的中文介绍。
为了说明 ASGI 的由来,他从 Tim Bernes Lee 1989 年发明万维网开始,带现场观众走过了从 CGI 到 WSGI 的十年发展历程。一开始万维网只能传输静态文件,为了满足编写动态内容的需求,1993 年 CGI 由此诞生。但是使用 Python 编写 CGI 的方式特别的繁琐、低效,2003 年 Python 官方推出了 WSGI。该协议的推出,是为了统一标准,提高效率。甚至有开发者说,”有了 WSGI 之后,写 web 框架就像喝水一样简单。“
WSGI 提出之时,主流的网络协议还只有 HTTP。但是 2011 年,WebSocket 标准完成。次年,HTTP2 协议敲定。如今,HTTP 2 协议和 WebSocket 协议的使用越来越广泛。微信小程序的网络请求甚至规定了只能走 HTTP2 协议。因此,WSGI 协议确实到了需要更新的时候了。
在没有 ASGI 的情况下,目前使用 Python 来处理这三种协议,需要使用多个框架,项目复杂度增加。而 ASGI 的目标,就是在一个框架中直接处理三种协议请求。
ASGI 是基于 WSGI 的,是对后者的补充,由 protocol server、channel layer和 application 三层组成。如果 ASGI 协议最终普及,何世友认为能够显著提高开发效率,降低基础代码的迁移成本;但是同时也提示了需要注意的事项:
- 需要更强力的 interface server
- 需要特殊的 scaling 技巧
- 需要和 WSGI 和谐共处等。
6. 张其川:自动化运维和工具
Python 在运维方面的应用,可能是最广泛的。这场的嘉宾张其川是自学 Python 的,自己还写了一个自动化运维的开源项目——CheungSSH。
在他看来,大数据和云计算时代,服务器的规模空前庞大,而人力成本则在不断攀升,自动化成为企业的必然需求。而选择 Python 做自动化,理由非常直接:
- 简单易学
- 使用简单,代码量少
- 开源,学习方便,开发速度更快
对于以上三点,相信其他的 Python 爱好者都会认同。
他提出,自动化的目标就是省钱,无论使用的是什么工具,puppet 还是 ansible ,最终的标准都是能省多少钱。
如果你去看直播视频的话,你会发现这也是一位挺有趣的嘉宾。
7. 胡国涛:WEGO 的开源之旅
现在微信这么火,又出了小程序这个原子弹,作为 Python 程序员的我们如果想做微信公众号开发该怎么办?开源界其实有多个可选的框架,这次大会邀请到的是一个名叫 WEGO 的微信开发框架背后的团队成员。
和其他开源项目一样,WEGO 项目的起源都是因为开发者怕麻烦。微信公众号的开发,在胡国涛及其团队看来是比较麻烦的,主要体现在接口繁多、文档错乱和报错模糊。而且对于 Python 程序员来说,还得去学习 JS,麻烦的程度又高了很多。
WEGO 团队对自己的框架还是非常的自信,称有清晰的接口、完整的文档和详细的报错,并给出了具体的代码进行说明。
谈点笔者的个人观点。目前 WEGO 项目在中文网络上的介绍非常少,简单的百度搜索几乎找不到任何内容。只能从项目的 Github 项目地址了解。而其中列出的文档,也并不是那么完整。如果想让其他 Python 开发者使用该框架的话,希望 WEGO 团队再努力完善一下官方文档。
8. 馋师:Python 开发辅助软件提高工作效率
效率是开发者不变的追求。这场分享来自有五年 Python 编程经验的后端开发者馋师。他主要分享了以下三种利用 Python 提高工作效率的方式:
- 用Python开发比AutoHotkey更好用的热键软件,并同时支持Windows、Linux、Mac OS三种系统。
- 通过Monkey Patching实现运行时调用栈追踪,用于快速研究代码流程(10分钟弄懂一个框架),及实现非侵入式流程测试(不用埋点,不用加测试专用的函数参数)。
- 使用逐行注释法明示代码书写意图,成倍提升代码可读性和项目维护效率。
具体情况大家请看视频。
9. 石恩名:一种可视化爬虫技术分享
现在互联网行业对数据的重视程度越来越高,普通的业务工作人员获取数据的需求也越来越大。针对这类需求,逐渐出现了许多做可视化爬虫的公司,最突出的技术特点就是无需编码,可视化配置。这场分享中,广州一家大数据公司的技术经理分享了自己网络爬虫的框架,并介绍了如何解决构建可视化爬虫时碰到的问题。
在技术栈的选择上,我们这里只关注与爬虫爬取和存储直接相关的技术。该公司采用的是 Pyspider + PhantomJS 爬取页面,然后将结果存储在 mongoDB 和 redis 中。在数据库的选择上,讲者在某台机器上的结果显示如下,MongoDB 和 Redis 配合采集的速率优势明显。
分享者还探讨了使用机器学习技术的可能,可以用来计算两个页面的 HTML DOM 相似度,再通过多个相似页面计算 URL 正则表达式,来构建判别器。
在本文中不方便详细回顾具体的框架设计。如果你对设计爬虫系统有兴趣的话,推荐参考这里分享的框架。
10. 汤英康:大数据监控警告系统
最后这名分享者给出了一套完整的大数据监控告警平台产品方案,对于没有接触过数据监控系统设计的来说极其具有参考价值。
根据讲者的分享,监控系统主要涉及数据采集集、数据存储、数据可视化、数据警告等四大部分,同时要求系统做到高可用、高可伸缩和高并发。
最终的技术架构如下图所示: