AberSheeran
Aber Sheeran
RSS feed
16 Python signal

signal 提供了跨平台的信号处理能力,但信号机制在不同系统上却有很大的差异。Python 没有处理一些本可以处理的不同,于是给使用者留下了一点隐藏的问题。

信号的跨平台差异

SIGINT/SIGTERM

这是两个常常出现的信号,它们的处理函数往往被加入进程退出的程序。在 Unix 和 Windows 上都可以给它们注册对应的信号处理函数,发送却完全不同。

在 Windows 上给一个进程发送 …

15 Python asyncio

asyncio 模块里给了用户三个类型,FutureTask 以及 Handle。Python 语言本身提供了 Coroutine 类型。

要理解 asyncio 这个模块,就要从这四个类型的关系入手。

Coroutine

这是一个老生常谈的类型。它就是对 Generator 类型的一种封装,在较早版本的 …

14 asyncio 与 kafka

aiokafka

Python 开发里使用的异步 kafka 客户端,大多是 aiokafka,因为它是目前 Python 社区里唯一一个直接支持 asyncio 的 kafka 客户端库。

但这个库有个大问题,也就是 [Producer] Performance drop when …

13 PDM 使用精要

PDM 是一个新的 Python 包管理工具,它的作者是 PyPa 成员、Pipenv 目前主要的维护者之一。在我许久的使用过程里,深觉这个工具比目前出现的任何其他 Python 包管理工具都好用。但是不能说它是 Python 界的 NPM,因为有些功能 NPM 都没有 …

12 ContextVars 详解

ContextVars 是 Python3.7 以及之后版本里的标准库。

应用场景

Context managers that have state should use Context Variables instead of threading.local() to …

11 pip 安装与脚本安装

很多著名的库,例如 poetry 虽然提供了 PyPi 包,但它们仍然推荐使用它们自身编写的安装脚本去安装。

这是为什么?

众所周知,使用 pip 命令默认是安装到系统的 python 环境里的。当你安装的包过多,总会遇到依赖冲突的事(如果没遇到,说明你很幸运)——一个库依赖于另一个库的 0 …

10 poetry 使用指北

poetry 满足了我对包管理器的一切愿望,它的野心有点大,向着 Python 界的 npm 一路狂奔。

但这不是贬义词,它是一款比 pipenv 优秀的包管理器——当你适应它之后。

poetry init

就像 npm init 一样,poetry …

9 好看易用的命令行

在之前的一篇文章输出彩色命令行里,我介绍了 Colorama 的基本使用方法。但作为一个命令行程序,除了好看的五颜六色的输出,还需要解析命令行参数。

一个简单好用的库——click,不仅集成了 Colorama,还提供了更简单的命令行解析。

Command(命令)

使用click创建一个命令十分简单:

import click


@click …
8 Aligi

无服务函数也许是近来较为热门的一个东西。由于我没得信用卡,无奈只好在阿里云上小试一番。

但我惊奇的发现,如果使用flask等支持WSGI的Web框架去写一个无服务函数,是没办法直接用阿里云的API网关去调用函数的。因为网关为了通用性,它不可能一个个协议去做适配。

那么我为了方便开发与使用,创造了Aliyun Gateway Interface(aligi)。

如何使用

按例,pip install aligi安装一下 …

7 Python使用JWT

最近在用阿里云的函数计算服务,需要使用JWK(Json Web Key)来生成JWT(Json Web Token),一时之间竟没有找到一个优雅的、提供JWK生成JWT的库,差点绝望的使用了阿里云给的Java样例。然后惊喜的发现PyJWT其实是支持JWK的,但是文档上并没有写。

此篇做一个系统的梳理,算是对官方文档的补充。

安装

如果你不需要使用类似于RSA的加密算法 …

6 Django app配置子域名

最近由于PM的需求,又去研究了Django一个app对应一个子域名的用法。寻找资料的过程中发现没有较好的中文教程,遂有此篇。

安装Django-Hosts

按照惯例,首先需要pipenv install django-hosts(如果你没有pipenv, pip也是一样的)。

  1. 'django_hosts'加入项目设置中的INSTALLED_APPS

  2. 'django_hosts.middleware …

5 输出彩色命令行

Windows7之后的Windows系统自带的CMD或者Powershell,就不再支持ANSI代码来控制颜色了。那么我们如果想要改变Windows的命令行颜色,只好通过Windows给的句柄来控制颜色。

import sys
import ctypes

if sys.platform.startswith('win'):
    stdout = ctypes.windll.kernel32.GetStdHandle(-11)
    def …
4 Supervisor

最近我一个开发怎么就干上了运维的活,此篇以作记录。

下载之后修改/etc/supervisord.conf其中取消后台Web端口的注释

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001 …
3 Pyinstaller打包代码

一般来说Python打包成系统可执行文件,有两个库,但支持更新版本(3.6+)的Python的就是Pyinstaller了,有趣的是Pyinstaller在windows7上运行的十分完美,到windows10上就有一些warning,它是由于win10的feature导致的,这个warning并不影响我们的打包。

在win10上面打包虽然有warning,但是打包出来的exe放到别的电脑上跑就没有问题。在win7打包出来的,放到别的win7上就找不到dll,我差点因为这个而挂科。

安装Pyinstaller

首先pip install pyinstaller …

2 监听文件事件

最近在完善自己的轮子的时候,遇到了一个问题,需要监听文件变化,查了查资料,写下此篇以作记录。

Watchdog

由于没找到能直接用的标准库,所以选择用了这个简单易用的第三方库。

调用它很简单,官方给的例子如下

import sys
import time
import logging
from watchdog.observers import …
1 Django定时任务

定时任务无论是个人开发还是企业业务都是需要的。但个人开发的时候使用celery,未免有点杀鸡用牛刀的感觉。Celery性能不错,但配置起来并没有那么简单。非密集型的定时任务,我们完全可以使用django-background-tasks来替代Celery。

How to use

按例,pip install django-background-tasks来安装。

然后加入INSTALLED_APPS:

INSTALLED_APPS = (
    # ...
    'background_task' …