python进程任务管理器
需求: 用py实现一个任务管理器
- 任务可 add/stop 操作, 并且有状态调度
- stop时立即清理, 包括所有子进程
- 子进程可能启动新的进程/线程
结论:
用线程池+信号量实现. 仅对高耗时的循环操作添加信号量.
不提供强制终止功能, 因为Python 没有原生的线程安全/进程安全的强制终止方式
强制终止可能导致: 锁未释放(死锁风险)/内存泄漏/僵尸进程/数据损坏(例如文件写入中断)
方案对比:
- 线程/进程池: 只能干预未开始的future, 不能停止已存在的
- pkill: 无效
- process.terminate: sig 15信号, 无法立刻终止阻塞的动作, 如io/sleep. 此外, process方法的子进程里如果有阻塞动作, 在fastapi中会阻塞事件循环.
- process.kill方法: sig 9 信号, 可以立刻终止. 但是如果子任务有新子进程, 会导致僵尸进程
- os.killpg方法: 同上
- 主流可行的方法:
- 记录pid树: 子进程调用太麻烦
- 传递stop信号: 也相对麻烦, 调用原子函数需要层层传递
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Juice's Blog!







