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
1
rel 2018-09-13 10:57:49 +08:00
注释写的真好,点赞
|
2
nbboy 2018-09-27 09:47:37 +08:00
很棒
|
3
ClutchBear 2019-01-10 16:58:14 +08:00
不支持 python3...
|
4
mythmgn OP 最近在基于 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) ``` |
5
mythmgn OP 奇怪 似乎回复不支持 markdown?
|