[库推荐] 自荐 Python 开源的基础库 CUP 给大家 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mythmgn
V2EX    Python

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

  •  
  •   mythmgn 2018-09-12 14:58:02 +08:00 3355 次点击
    这是一个创建于 2617 天前的主题,其中的信息可能已经有所发展或是发生改变。

    介绍

    • CUP 基础库是百度开源的 Python 语言基础库,致力将 DEV 从涉及底层操作、Util 操作类解放出来,使其更关注构建 service 上层业务逻辑。
    • 目前已涵盖了构建一个服务的各个方面,大家可以从基础库的代码结构、wiki、doc 中进行简单了解。
    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

    5 条回复    2019-05-29 10:38:17 +08:00
    rel
        1
    rel  
       2018-09-13 10:57:49 +08:00
    注释写的真好,点赞
    nbboy
        2
    nbboy  
       2018-09-27 09:47:37 +08:00
    很棒
    ClutchBear
        3
    ClutchBear  
       2019-01-10 16:58:14 +08:00
    不支持 python3...
    mythmgn
        4
    mythmgn  
    OP
       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
        5
    mythmgn  
    OP
       2019-05-29 10:38:17 +08:00
    奇怪 似乎回复不支持 markdown?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5596 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 06:09 PVG 14:09 LAX 22:09 JFK 01:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86