【技术小结】使用subprocess写一个异常中止后自启动的python进程

文章介绍了如何使用Python的subprocess模块创建一个进程,该进程在被kill后能自动重启。通过write2file.py生成随机数写入log.txt文件,execute.py负责启动和监控进程。当write2file.py进程被终止时,execute.py会创建新的进程以保证任务持续进行。
摘要由CSDN通过智能技术生成

介绍——python进程

  命令行中运行一个python文件便是启动了一个进程。首先我们写一个能够定时产生随机数并写入文件log.txt的代码文件,用于模拟真实情况中的进程(长时间的计算、网络数据传输、模型训练等)。运行环境为linux,需安装python。

代码——目录结构

  目录结构包括write2file.py和execute.py这两个文件。
请添加图片描述

write2file.py
import time
import numpy as np

def generate_random_data():
    while True:
        time.sleep(1)
        with open('log.txt', 'a+') as f:
            f.write('[{}] '.format(time.strftime('%H:%M:%S')) + str(np.random.randint(10)) + '\n')

if __name__ == '__main__':
    generate_random_data()
execute.py

  该文件用于启动write2file.py对应的进程,启动之后调用proc.wait()使主进程阻塞,等待proc子进程结束退出。

import os
import subprocess
import time

if __name__ == '__main__':
    while True:
        proc = subprocess.Popen(['python', 'write2file.py'])
        print('creating new process pid: %d' % proc.pid) 
        proc.wait()

在linux中执行以下命令测试进程:

# 启动execute.py,并启动write2file的进程,图中进程号为36173
python3 execute.py
# 查看log.txt的文件内容
cat log.txt
# 显示包含"write2file.py"的进程
ps au | grep "write2file.py"

请添加图片描述

现在假设由于外界原因导致该进程被kill,手动kill该进程,可以发现原来的execute.py创建了新的write2file进程,进程号为36812,继续写入log.txt文件。

# kill pid为36173的进程
kill -9 36173

请添加图片描述

以上,就完成了一个使用python的subprocess包构建一个异常中止后自启动的python进程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值