2.1 Python语言的应用领域
1.云计算基础设施
云计算平台分为私有云和公有云。私有云平台如大名鼎鼎的OpenStack(很多企业用其部署自己的私有云),是Python编程语言编写的。公有云,不论是AWS、Azure、GCE(Google Compute Engine),还是阿里云和青云,都提供了Python SDK,其中GCE只提供Python和JavaScript的SDK,而青云只提供Python SDK,可见各家云平台对Python的重视。
说明
软件开发工具包(Software Development Kit,SDK)指的是软件工程师为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件时使用的开发工具的集合。
2.DevOps
互联网时代,只有快速试验新想法,并在第一时间安全、可靠地交付业务价值,才能保持竞争力。DevOps推崇的自动化构建、测试、部署,以及系统度量等技术实践,是互联网时代必不可少的。
自动化构建(持续集成)是为应用定制的。如果是Python应用,因为有setuptools、pip、virtualenv及tox等工具的存在,实现自动化构建非常简单。而且,因为几乎所有的Linux版本都内置了Python解释器,所以在用Python做自动化时,不需要预安装其他软件。
自动化测试则是基于Python的Robot Framework企业级应用最喜欢的自动化测试框架实现的,而且和语言无关。自动化测试工具Cucumber有很多支持者,事实上,Python对应的Lettuce一样好用。此外,Locust(一款基于Python开发的开源负载测试工具)在自动化性能测试方面也开始受到越来越多的关注。后起之秀Selenium,一款Web自动化测试的轻量级框架,现在也已经被越来越多的公司应用。Selenium的主要特点是具有开源性、跨平台性,且有众多的编程语言支持,除了可以用Python编写测试用例以外,也可以用Java、PHP甚至Shell来编写测试用例。
自动化运维(自动化配置管理)工具,新生代Ansible、SaltStack,以及轻量级的自动化运维工具Fabric,均是基于Python开发的。由于较前两者而言,Fabric的设计更为轻量化和模块化,而且很容易实现二次开发,因此受到越来越多开发者的欢迎,很多公司同时用它们来完成自动化运维工作。
3.网络爬虫
大数据的数据从哪里来?除了部分企业有能力自己产生大量的数据以外,大部分情况下,是需要靠爬虫抓取互联网数据来做分析的。
网络爬虫是Python的传统强势领域,流行的爬虫框架Scrapy、HTTP工具包urllib+urllib2、HTML解析工具Beautiful Soup 4、XML解析器lxml等,都是能够独当一面的类库。笔者公司的分布式网络爬虫系统也是基于Scrapy开发的。不过,网络爬虫并不仅仅是打开网页,解析HTML这么简单。高效的爬虫要能够支持大量灵活的并发操作,常常要针对几千甚至上万个网页同时抓取,传统的线程池方式资源浪费比较大,线程数上千之后系统资源基本上就全浪费在线程调度上了。Python能够很好地支持协程(Coroutine)操作,故而基于此发展了很多并发库,如Gevent、Eventlet,还有Celery之类的分布式任务框架等。被认为比AMQP更高效的ZeroMQ也是最早提供Python版本的。有了对高并发的支持,网络爬虫才真正可以达到大数据规模。
4.数据处理
从统计理论,到数据挖掘、机器学习,再到最近几年提出来的深度学习理论,数据科学正处于百花齐放的时代。数据科学家们都用什么语言编程呢?Python是数据科学家最喜欢的语言之一。和R语言不同,Python本身就是一种工程性语言,数据科学家用Python实现的算法,可以直接用在产品中,这对大数据初创公司节省成本是非常有帮助的。正是基于数据科学家对Python和R的热爱,Spark对这两种语言提供了非常好的支持。
Python的数据处理相关类库非常多。高性能的科学计算类库NumPy和SciPy,给其他高级算法打了非常好的基础,Matploglib让Python画图变得像Matlab一样简单。Scikit-learn和Milk实现了很多机器学习算法,基于这两个库实现的Pylearn2,是深度学习领域的重要成员。Theano利用GPU加速,实现了高性能数学符号计算和多维矩阵计算。当然,还有Pandas,一个在工程领域已经广泛使用的大数据处理类库,其DataFrame的设计借鉴自R语言,后来又启发Spark项目实现了类似机制。
除了这些领域以外,Python还可以被广泛应用于Web开发、游戏开发、手机开发、数据库开发等众多领域。