问题描述:python 进程一直在往内存写数据,需要不定时的保存 已经写入内存的数据。换句话说,程序常驻内存,通过指令完成不同的操作。达到像使用http 不同参数控制不同返回的效果
解决方法 :使用 signal 控制进程方法的执行
主要内容:1.我所能想到的方法;
2.signal 的方法
3. 实现代码
4.补充说明
在使用singal 之前的思想是使用tornado 封装成服务接口 ,通过http的形式来完成 程序执行操作的控制,很明显,只是后台进程的通信,借助http 虽能实现,但带来了不必要的网络开销
其主要包括两方面的内容:a.程序控制代码的开发,b.控制程序执行的命令
程序控制代码 signal_demo.py ,如下:
import sys
import os
import signal
# 创建需要执行的操作 ,其格式固定
def query_handler(signum,frame):
print("开始数据生产")
build()
# 创建第二个 要执行的操作
def save_handler(signum,frame):
print("保存结果")
save()
# 创建信号注册 名字为USR1
signal.signal(signal.SIGUSR1, build_handler)
# 保存信号注册,名字为USR2,
signal.signal(signal.SIGUSR2, save_handler)
# 创建循环,检测信号的出现
while True:
time.sleep(3)
shell 控制命令如下:
# 获得 程序PID
PID=$(ps -ef|grep 'python signal_demo.py'|grep -v 'grep'|awk '{print $2}')
# 根据 pid 对USR1的对应的业务 发送执行命令
kill -USR1 $PID
其实整个代码并不复杂 ,但是从命名来看 使用 kill 来唤醒 指定程序控制指令 有些不好理解。