python 信号通信

Posted hooo-1102

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 信号通信相关的知识,希望对你有一定的参考价值。

司机和售票员的故事
1. 创建父子进程,分别表示司机和售票员
2. 当售票员捕捉到 SIGINT信号时 给司机发送 SIGUSR1信号,此时司机打印 “老司机开车了”
    当售票员捕捉到 SIGQUIT时 给司机发送 SIGUSR2信号,此时司机打印“系好安全带,车速有点快”
    当司机捕捉到 SIGTSTP时,发送SIGUSR1给售票员,售票员打印 “到站了,请下车”
3. 到站后 售票员先下车(子进程退出),然后司机下车

 

import multiprocessing as mp 
from signal import * 
import os
from time import sleep

def saler_handler(sig,frame):
    if sig == SIGINT:
        os.kill(os.getppid(),SIGUSR1)
    elif sig == SIGQUIT:
        os.kill(os.getppid(),SIGUSR2)
    elif sig == SIGUSR1:
        print("到站了,请下车")
        os._exit(0)

def driver_handler(sig,frame):
    if sig == SIGUSR1:
        print("老司机,开车了")
    elif sig == SIGUSR2:
        print("车速有点快,系好安全带")
    elif sig == SIGTSTP:
        os.kill(p.pid,SIGUSR1)

#售票员
def saler():
    signal(SIGINT,saler_handler)
    signal(SIGQUIT,saler_handler)
    signal(SIGUSR1,saler_handler)
    signal(SIGTSTP,SIG_IGN)
    while True:
        sleep(2)
        print("Python 带你去远方")

p = mp.Process(target = saler)
p.start()

signal(SIGUSR1,driver_handler)
signal(SIGUSR2,driver_handler)
signal(SIGTSTP,driver_handler)
signal(SIGINT,SIG_IGN)
signal(SIGQUIT,SIG_IGN)
p.join()

 

以上是关于python 信号通信的主要内容,如果未能解决你的问题,请参考以下文章

python 信号通信

在tablayout片段之间进行通信[重复]

与另一个片段通信的片段接口

python 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式

Python之进程同步控制(锁信号量事件 )进程间通信——队列和管道

无法通过接口获取与片段通信的活动