Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4461014
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: Python/Ruby

2014-04-04 17:19:07

文章来源:http://blogs.360.cn/blog/how-360-uses-python-0/

打算写这样一个系列,说说我们在360里面,如何使用Python。在360,除非是需要包含在360客户端软件当中的功能,技术人员使用什么语言进行开发,更多的是一种个人,最多是项目团队的决定。因此我们的同事会使用 php写页面,用python的工具,用c/c++写模块,甚至用易语言写界面。

也正是因为这个原因,虽然这个标题写得很大,但其实我也只能写一下我所在的团队如何使用Python。我们目前有Python代码约6万行,程序运行在Linux下,使用 Python2.5 和 Python 2.7 环境。

这6万行Python代码被被分成80余个项目进行组织。每个项目提供一个或一组完整的功能集合,每个项目都有自己的 setup.py 文件用来将项目代码打包成 Python (Distribution),部分项目还有自动文档生成,我们使用的是  和 reST格式的文本。打包好的Python包被发布到我们自己搭建的内网的与  兼容的私有 pypi 服务器上,而文档保存在内网的类似于 的服务器上。

后台团队的代码主要运行我们自己的Linux服务器集群上,开发和部署的成本比较低,因此我们使用比较敏捷的开发流程。流程大体上可以分为下面几个步骤:

  1. 开发:顾名思义,这个步骤当中,开发人员在开发机上面写代码实现功能,不同的开发人员的开发环境使用 扩展过的  脚本进行隔离;
  2. 单元测试:开发人员负责对代码当中的关键部分进行单元测试,通常使用 ,我们使用  将测试用例聚合和进行回归测试,不定期使用  确定代码测试覆盖率(集成在nose当中)。这一步还会使用  对代码进行扫描;
  3. 构建:使用  将 Python代码构建成包,同时将这个包发布到测试版 pypi 服务器(pypi-testing),测试版pypi服务器是我们搭建的若干个私有pypi其中之一,发布工作使用的是我们扩展的 distribute 命令;
  4. 测试:在测试机器或测试流程当中,从测试版pypi当中获取最新的库并测试,这个部署过程我们使用 distribute 提供的 easy_install 工具进行;
  5. 发布:将经过测试的包从测试版pypi服务器移到发布版pypi服务器,这个同样通过扩展的 distribute 命令;
  6. 部署:运维人员从发布版pypi服务器上获取最新的库,并更新到真实的服务器上,并应用新的变更。这个过程当中任何一台单机部署使用的都是 easy_install,在分布式环境下,我们使用  进行多机部署;
  7. 监控:新版本上线之后,会持续通过日志和报警系统进行系统监控。我们专门扩展了  模块以便适应我们的监控需求。

熟悉Python的朋友们可能看到这些名词和包都很熟悉,因为我们所使用的都是业界广泛使用的开发、测试和运维的工具。但这些工具很多都适合于开源软件(Open Source Software)而非私有软件(Proprietary Software),例如 distribute 与 pypi.python.org 的结合是天衣无缝的,Sphinx 和 readthedocs 也是很容易结合,但是作为一个私有软件,我们无法将代码和文档放到 pypi 或 readthedocs 上面。为此我们几乎复制了整套的基础架构,包括 pypi 服务,readthedocs 服务等,后续我会介绍我们如何做到这点的。希望这个系列对于其他正在使用Python开发私有软件的同仁能有些帮助。

阅读(702) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~