【有书共读21】Python编程之美 08
代码管理和改进
当前流行的持续集成工具分别是Travis-CI、Jenkins、Buildbot。它们通常与Tox配合使用。
Tox:是一个自动化工具,可用于打包、测试、以及从终端或集成测试服务器上部署python软件。Tox是一个从命令行virtuanenv管理和测试的python工具。
系统管理
Travis-CI:是一个分布式持续集成服务,免费为开源项目构建测试。与GitHub无缝集成。Travis-CI支持***台上多个python解析器环境的持续集成。
Travis-CI可以在linux、mac os x 或ios虚拟机上构建代码。在代码库中添加.travis.yaml文件。
language:python
python:
- "2.6"
- "2.7"
- "3.3"
- "3.4"
script:python tests/test_all_of_the_units.py
branches:
only:
- master
若想要在Travis-CI中适用tox,可以在代码仓库中提添加tox脚本。并修改script行:
install:
- pip install tox
script
- tox
Jenkins:可在Windows、linux、mac os x,也可以作为插件集成进每种代码管理工具。Jenkins是一个java servlet,自带servlet容器,可以直接使用java --jar Jenkins.war运行。
Buildbot:是一个python系统,自动化编译/测试,以验证代码变更。可以通过pip安装:$pip install buildout
自动化服务
Salt、Ansible、Puppet、Chef、CFEngine都是应用服务器自动化工具,为系统管理员提供一种优雅的方式管理物理或者虚拟机器集群。可以管理linux、类Unix、Windows机器。
Salt:将主节点称为master,将***节点称为minion。设计目的是速度。默认zeroMQ进行网络数据传输。主节点与minion之间使用TCP连接。
Ansible:Ansible最大的优势是不要求在客户端上安装python以外的任何东西。所有其他方案都会在客户端上持续运行后台程序轮询主节点。playbook是ansible的配置、部署、编排文档,以yaml格式编写并使用jinja2来实现模板化。
Puppet:有一个特定的puppet主节点,负责编排***节点。提供一个自己特有的配置语言puppetscript。
Chef:与Puppet相反,Puppet提供一个框架以灵活性为代价简化工作。Chef不提供任何框架能力,它具备极好的扩展性,但也因此更难使用。
CFEngine:内存占用很小,用C语言编写而成,其目的是在发生失败时,保持健壮性,通过分布式网络中运行的自主***节点来实现这个目标。
系统和任务监控
psutil、fabric、luigi都是帮助系统管理员监控运行任务的,但是应用场景不同。
psutil:将一些可以通过unix工具获取的信息(cpu、内存、磁盘、网络、用户、进程等),以python接口提供出来。
fabric:可以简化命令定义的过程,通过ssh连接多台主机,并在远程主机上执行命令。
luigi:是一个任务流水线管理工具。可以帮助开发者管理大型、长期运行批量任务的流水线,将hive查询、数据库查询、Hadoop、java任务、pyspark任务以及自己编写的任务拼接在一起。
加速
Python的C实现允许多个线程同时进行操作。python的内存管理并非线程完全安全的。因此需要全局解析器锁(GIL)来防止多个线程同时运行同一段代码。
常用的加速方案有:threeding、multiprocessing/subproess、pypy、cython、numba、weave、pycuda/gnumpy/tensorflow/theano/pyopencl、直接使用C/C++库。
与C/C++/FORTRAN库进行交互
CFFI和ctypes是python库,f2py用于与FORTRAN代码交互的场景。SWIG可让C对象为多种编程语言所用。boost.python是一个C++库,可以将C++对象暴露给python。
C/C++/FORTRAN的python接口库包括:CFFI、ctypes、F2PY、SWIG、Boost.Python。


阿里云工作强度 710人发布