Python中的多进程(multiprocessing)

Python中的多线程、包括协程,由于CPython的GIL(Global interpreter Lock ,全局解释锁)问题,只能实现并发(Concurrency),不能实现并行(Parallelism)。 因此,在并行计算场景,多进程是Python最简单的选择。

Django中的logging

对网站、微服务来说,log是比较重要的运维工具。 Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置。 此外,也提供了一些独特的扩展。

用cookiecutter来创建新项目

因为Python系缺失一个Wizard,也缺少项目结构的标准,于是出现了cookiecutter。 这是一个项目生成器,也可称为引擎,因为它只完成了最核心的功能。 真正决定一个项目长什么样的模板,却可以自由定制。 也因此,它能生成任何一种语言的项目。

Python中的atexit

atexit是标准库中一个简单的小模块,作用是提供退出的回调。 如果有什么事是在退出时需要做的,就可以使用它。 但仅限于比较简单的程序。 实际上,最好不要使用它。

用setuptools_scm来自动控制Python包的版本

手动管理Python包的版本号一段时间后,寻求自动化的手段,是自然而然的。

pytest的插件介绍:pytest-cov、pytest-pep8与pytest-flakes

pytest不仅是一个功能强大的测试框架,同时也是一个插件化的测试平台。

用Python做数据分析的环境初始化

从一个标准的Python环境,到一个可以做数据分析的环境,还需要有一些准备工作。 本文就是记录这些准备工作,便于查阅。

在setup.py中配置SWIG模块

SWIG的一个优点是,受到了distutils/setuptools的原生支持。 在setup.py文件中,可以很方便地直接把*.i文件作为源文件进行配置,而不用手写编译脚本。 本文通过一个Demo项目,来讲解如何在setup.py中对SWIG进行配置。

用SWIG向Python提供C++里STL的容器

在Python项目中使用C/C++的代码,除了少数场景,其它都有数据交换的需求。 而C++的vector、map等,则是常见的数据容器。 本文介绍如何利用SWIG,在Python中调用STL的string、vector和map。

解决setup.py编译C++代码的-Wstrict-prototypes警告

本文介绍了一个在利用setuptools的Extension来编译C++代码时,会出现的-Wstrict-prototypes警告,及其解决方案。

pytest中使用mock

单元测试的条件有限,在测试过程中,有时会遇到难以准备的环境。 比如,与服务器的网络交互、对数据库的读写等。 而mock的技术,就是在测试时,不修改源码的前提下,替换某些对象,模拟测试环境。

pytest中的fixture

会写测试,和写好测试,是差距很大的两种境界。 本文介绍pytest中setup与teardown的写法,算是单元测试的进阶内容吧。

蛇宗三字经(The Zen of Python)

记录一下《蛇宗三字经》,以便自省。

在Python代码中调用C/C++代码

在Python代码中调用C/C++代码,这需求是比较常见的。 毕竟,当代软件世界的基础设施领域是C语言的天下,很多开发工作不可避免地要与它打交道。 而C++则是家族的嫡长子,也占据了一些不可替代的位置。 本文着重介绍ctypes与SWIG,也会提一下其它方案。

Python项目的pytest初始化

pytest,曾用名py.test。 它能兼容unittest与nose的测试代码,写法简洁,并且还有自己的独到之处。 本文仅介绍pytest测试最基本的写法,以及如何在一个Python项目进行初始化。

在AppVeyor上配置Python项目

在GitHub上做CI,大哥是Travis。 不过,Travis只支持Ubuntu和Mac OS X环境。 这就给二哥AppVeyor留下了生存空间,它专门负责做Windows环境的CI,并且对Windows生态下的.NET、Azure等,提供了很好的支持。 本文介绍如何用AppVeyor来做纯Python项目的集成测试。

编译运行SWIG的example代码样例

跑通SWIG的example代码,比Boost.Python的HelloWorld要简单一些。 不过,对不熟悉gcc的人来说,还是很费劲。 本文基于官方教程,补充了一个可行的Makefile。

编译运行Boost.Python的HelloWorld

对于C/C++开发经验不多、或者只有Python经验的人来说,要跑通一个Boost.Python的HelloWord程序,是一件不容易的事。 本文介绍如何避开bjam,用Makefile打通最不容易的那个环节——编译。

setup.py里的几个require

在setup.py中,一般需要要调用setup()函数。 这个函数有诸多参数,其中一类是require,指定了一些需要的Python包。

用GitPython操作Git库

有时,需要做复杂的Git操作,并且有很多中间逻辑。 用Shell做复杂的逻辑运算与流程控制就是一个灾难。 所以,用Python来实现是一个愉快的选择。 这时,就需要在Python中操作Git库。

用Python的minidom写XML

读、或者说解析XML的需求很常见,而写、或者说生成XML的需求就比较少见。 本文简单介绍如何使用minidom,生成一个XML文件。

评估本地PyPI服务

既然已经有了pypi.python.org这个官方源,为什么还需要一个本地源、私有源、企业源? 本文评估了多个PyPI服务的特性与优缺点,并且给出了一些建立本地PyPI服务的建议。

Python中的and与or

从C语言家族,进入Python世界的程序员,当心都被Python中的and与or骗了!

Python中的bool

本文介绍了Python中的bool类型,以及相关的一些概念。

Python中的作用域、global与nonlocal

本文以Python 3来介绍作用域、LEGB规则、global与nonlocal关键字等内容。

Python中神奇的else

Python中的else设计,令人赞叹!

在Docker中使用python-ldap

本文介绍如何在Docker镜像python:alpine中安装python-ldap模块,并且尽量保持镜像的身材。