介绍——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进程。