本节书摘来自异步社区《Python高手之路(第3版)》一书中的第1章,第1.5节,作者[法]Julien Danjou,王飞龙 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 Joshua Harlow访谈
Joshua Harlow是一名Python开发人员,自2012年起任雅虎OpenStack团队的技术主管之一,他还曾作为CTO小组的成员之一负责调研IaaS解决方案。自那时起他陆续开发了若干Python库,如Taskflow(https://git.openstack.org/cgit/openstack/taskflow/)、 automaton(https://github.com/harlowja/automaton) 和Zake(https://github.com/yahoo/Zake)。
是什么促使你开始使用Python的?
我开始使用Python(那时候肯定还是Python 2.3或2.4)编程大概要追溯到2004年,那时我在IBM纽约(我的大部分亲戚和家人都住在纽约州北部,离他们很近)的Poughkeepsie实验室做实习生。我基本已经忘了当时具体做什么,但是主要用wxPython(http://www. wxpython.org/)和一些Python代码自动化某些系统。那就是我第一段和Python有关的经历,而且我将其称为我所迈出的第一步(那时候基本就是不断地输入self)。在实习结束之后我返回了学校(克拉克森大学,Clarkson University),后来我又读了研究生(罗彻斯特理工学院,Rochester Institute of Technology),并最终在毕业后加入雅虎,工作至今。
在接下来的几年里我在不同的团队(主要使用PHP、C++和Java)里工作过,而且还有幸和一些PHP核心开发人员一起工作,如Rasmus Lerdorf(https://en.wikipedia.org/wiki/ Rasmus_Lerdorf,他发明了PHP)和Sara Goleman(他负责http://www.yahoo.com 的后台和其他一些工作)。
最终我止步于CTO小组,在那里我和其他一些成员负责调研可用的开源云平台。最终我们选择了OpenStack(我们还调研了CloudStack以及基本上已经废弃的Eucalyptus),它几乎完全用Python开发(很可能是现存的最大的两三个Python项目之一)。我自2012年加入OpenStack社区并先后参与了若干组件的开发,目前我主要专注于OpenStack内外皆可用的扩展库(在oslo项目下,http://wiki.openstack.org/wiki/Oslo) 开发。我坚信(并且作为一名鼓吹者),创建OpenStack内外皆100%可用的库是非常重要的,而且我感觉这可以确保社区所开发的设计/开发良好的库不光是被它自己所使用(这意味着那些库不能令更大的开源世界获益,我觉得这不太好,也不应该是开源该有的样子)。
关于这门语言,你喜欢什么不喜欢什么?
我喜欢的一些方面如下(不完整列表)。
简洁。Python可以让新手开发人员迅速上手,也能让有经验的开发人员很容易地持续使用它。
代码风格检查(审阅代码是软件开发的重要组成部分,而且可以通过flake8、pep8和pylint这样的工具来保持一致性)。
自由选择编程风格并随意组合(但不会给自己带来麻烦)的能力。
一些我不太喜欢的方面如下(不完整列表)。
Python 2到Python 3的切换仍然比较痛苦(尽管six已经解决了大部分问题),但强制切换对维护一个社区来说似乎并不是个好办法。
Lambda太过简单,应该赋予其更多的能力。
缺乏好用的包安装器(pip仍然需要改进,如果能有个真正的依赖处理器就太好了)。
GIL(以及对它的需求)令我很不爽。
对显式asyncio模型的补充。我其实更乐于看到对隐式模型(如eventlet)的原生支持,而且现在已经有方法对使用green-threads和native-threads(对运行代码是透明的)进行切换(在解释器启动的时候)。在高并发/负载的情况下,我觉得无论如何都不能用单进程,反倒宁可让隐式的green-thread风格仅作为一种方式存在,人们如果想用的话(如果想得到额外的性能提升,那么在不得不切换到多线程之前,早晚都得做)可以切换到上面(这使得无需额外工作便可实现到新模型的转换)。
割裂的Python社区,主要是关于cPython和pypy(以及其他变种)的拆分。这件事让人总觉得不太对,而且应该互相协作以便两个项目能够合并在一起(共赢?)。
你最近在开发一个名为debtcollector的新库,进展如何?
进展很顺利!前面提到的简洁性使得开发一个新库非常容易,而且能够很容易地发布以便为他人所用。因为其代码主要源自我开发的另一个库(taskflow),所以代码的移植和扩展相对很容易而且不用太担心API的设计。我非常高兴地看到其他人(OpenStack社区内外都有)也对它有需求并开始使用这个库,我希望这个库能进一步成长,从而包含一些其他库(或应用)认为有用的更为丰富的废除模式。
依你之见,Python最大的缺憾是什么?
这是个很难的问题,因为并不多,所以我只挑两个我认为能让Python更现代的(我所认为的现代):
大多数新兴的语言(如rust、使用Chrome V8 Javascript引擎的Node.js以及其他语言)都包含了Python所具有的许多能力,但是它们都是即时(JIT)编译的。如果默认的cPython也能即时编译(并且能高性能地这样做),以便Python能够在性能方面能与这些新兴语言进行竞争。(是的,我知道开发出一个好的JIT编译器会花掉一个团队若干年的时间,但是我相信PyPy的相关工作已经进行一段时间了?)
随着时间的推移(在我协助开发taskflow以及其他库之后),对我来说一个越来越明显的需求是,Python真的需要一套强大的并发模式。我指的不是asyncio和/或threading风格的模式(我认为这些太底层),而是更高层次的有助于使应用程序能够有效地运行于更大规模的负载的概念。我知道一个名为goless的Python库(除taskflow之外的),它从Go语言(它提供了内置的并发模型)借鉴了很多概念。我相信这些更高层次的模式有必要作为标准库内置的顶级原函数/模式(或者通过其他机制提供)并妥善维护,以便新手开发人员(甚至是有经验的开发人员)能随心所欲地使用它们。我甚至觉得,如果没有这些功能,Python 很难与那些已经提供了类似支持的语言进行竞争。
有机会再谈,愿你编程顺利,生活愉快!