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 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式