python 使用 signal包 完成异步的进程控制

问题描述:python 进程一直在往内存写数据,需要不定时的保存 已经写入内存的数据。换句话说,程序常驻内存,通过指令完成不同的操作。达到像使用http 不同参数控制不同返回的效果

解决方法 :使用 signal  控制进程方法的执行

主要内容:1.我所能想到的方法;

                   2.signal 的方法

                   3. 实现代码

                   4.补充说明

1.替代方法

在使用singal 之前的思想是使用tornado 封装成服务接口 ,通过http的形式来完成 程序执行操作的控制,很明显,只是后台进程的通信,借助http 虽能实现,但带来了不必要的网络开销

2. signal 包

其主要包括两方面的内容: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 来唤醒 指定程序控制指令 有些不好理解。

你可能感兴趣的:(python)