[库推荐] 自荐 Python 开源的基础库 CUP 给大家

2018-09-12 14:58:02 +08:00
 mythmgn

介绍

cup
    |-- cache.py                module              缓存相关模块 ( Memory cache related module )
    |-- decorators.py           module              python 修饰符,比如 @Singleton 单例模式 (Decorators of python)
    |-- err.py                  module              异常 exception 类, Exception classes for CUP
    |-- __init__.py             module              默认__init__.py, Default __init__.py
    |-- log.py                  module              打印日志类,CUP 的打印日志比较简洁、规范,设置统一、简单(cup logging module)
    |-- mail.py                 module              发送邮件 ( CUP Email module (send emails))
    |-- net                     package             网络相关操作( Network operations, such as net handler parameter tuning )
    |-- oper.py                 module              一些混杂操作(Mixin operations)
    |-- platforms.py            module              跨平台、平台相关操作函数(Cross-platform operations)
    |-- res                     package             资源获取、实时用量统计等,所有在 /prco 可获得的系统资源、进程、设备等信息 ( Resource usage queries (in /proc)、Prcoess query、etc )
    |-- shell                   package             命令 Shell 操作 pakcage ( Shell Operations、cross-hosts execution )
    |-- services                package             构建服务支持的类(比如心跳、线程池 based 执行器等等) Heartbeat、Threadpool based executors、file service、etc
    |-- thirdp                  package             第三方依赖纯 Py 模块( Third-party modules:pexpect、httplib2 )
    |-- timeplus.py             module              时间相关的模块(Time related module)
    |-- unittest.py             module              单元测试支持模块( Unittest、assert、noseClass )
    |-- util                    package             线程池、可打断线程、语义丰富的配置文件支持( ThreadPool、Interruptable-Thread、Rich configuration、etc )
    |-- version.py              module              内部版本文件,CUP Version

如果你觉得 CUP 很棒,请帮我们 star,并推荐给厂内、厂外的 亲朋砖友。 更欢迎为 CUP 撰写 patch、新 feature,一起添砖加瓦!

感谢, ---Gallon

2662 次点击
所在节点    Python
5 条回复
rel
2018-09-13 10:57:49 +08:00
注释写的真好,点赞
nbboy
2018-09-27 09:47:37 +08:00
很棒
ClutchBear
2019-01-10 16:58:14 +08:00
不支持 python3...
mythmgn
2019-05-29 10:36:24 +08:00
最近在基于 CUP 写踩坑之旅, 欢迎大家查看: 附一个昨凌晨写的


# Python 踩坑之旅进程篇其三 pgid 是个什么鬼

## 1.1 踩坑案例

pid, ppid 是大家比较常见的术语, 代表进程号,父进程号. 但 pgid 是个什么鬼?

了解 pgid 之前, 我们先复习下:

- [进程篇其一]( https://mp.weixin.qq.com/s?__biz=MzUxMjIzODQ3Mg==&mid=2247483675&idx=1&sn=4338aef5e4268d01d9197cdbb515b301&chksm=f96637fcce11beea8bbbb617359152311e968b0023f844d90164943235db412286572dc5973e&token=863711821&lang=zh_CN#rd)
- 里面场景是: 一个进程通过`os.system`或者`Popen`家族启动子进程
- 后通过杀死父进程的方式无法杀死它的连带子进程
- 我们通过其他方式进行了解决

这个场景还有个后续就是:

- 如果这个子进程还有孙子怎么办?
- 它还有孙子的孙子怎么办?

这个就是今天我们遇到的坑, 怎么处理孙子进程. 大家注意, 不仅是 Python 会遇到这个问题, 其他语言包括 Shell 都一样会遇到这种"孙子"进程怎么进程异常处理的问题.

## 1.2 填坑解法

本期的坑位解法其实有两种, 第一种比较暴力, 简称穷尽搜索孙子法.

a. 穷尽搜索孙子法, 代码示例

关键点:

- 使用 cup.res.linux 中的 Process 类, 获得该进程所有的子孙进程
- 使用 kill 方法全部杀死

```python
from cup.res import linux
pstatus = linux.Process(pid)
for child in pstatus.children(recursive=True):
os.kill(child, signal.SIGKILL)
```

b. 获得该进程的 PGID, 进行 kill 操作

b1. 先讲个 shell 操作的做法, 使用 ps 获取进程的**pgid**, 注意**不是**pid

```bash
# 以 mysqld 为例, 注意 pgid 项
ps -e -o uid,pid,gid,pgid,cmd|grep mysql
```

结果:

- 注意其中第三列, 该进程和子进程都使用了同样的 pgid **9779**

9790 0 9779 /bin/sh /usr/bin/mysqld_safe --datadir=/home/maguannan/mysql/mysql/....

10171 501 9779 /home/maguannan/bin/mysqld --basedir=/home/maguannan/mysql/....

- 通过`kill -9 -9779`的方式可以杀死该 pgid 底下的所有**子孙**进程

b2. 在讲 Python 里的处理方式

```python
import os
import signal
from cup.res import linux
pstatus = linux.Process(pid)
os.killpg(pstatus.getpgid(), signal.SIGKILL)
```
mythmgn
2019-05-29 10:38:17 +08:00
奇怪 似乎回复不支持 markdown?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488557

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX