首页 > 解决方案 > Python 信号处理程序的执行

问题描述

我是 python 新手。我想了解python如何执行信号。我开始阅读官方文档。以下陈述没有意义

1.Python 信号处理程序不会在低级 (C) 信号处理程序内部执行。相反,低级信号处理程序设置一个标志,告诉虚拟机稍后执行相应的 Python 信号处理程序(例如在下一个字节码指令处)。

2.“Python 信号处理程序总是在主解释器的主 Python 线程中执行,即使信号是在另一个线程中收到的。” 有人能帮我吗

标签: python-3.xsignals

解决方案


当您注册信号处理程序时,您主要选择信号的异步处理。当接收到信号时,代码执行跳转到那些注册的信号处理程序(有异常检查sigaction)。您不能在信号处理程序中做太多事情,只有调用async-signal-safe函数是安全的。

当收到信号时,Python 不会立即跳转到信号处理程序(由用户注册),而是跳转到低级 C 信号处理程序,它只是将稍后执行的内容排队(请参阅此答案

由于每个进程都有自己的信号队列,因此进程中的每个线程都有自己的信号队列。但是线程信号队列是自身队列与进程队列的并集;这就是 POSIX 线程的建模方式。并且此功能用于线程间通信(使用pthread_sigmasksigwait实现)。但python并非如此。Python 信号处理程序总是在主解释器的主 python 线程中执行,并且只允许主解释器的主线程设置新的信号处理程序。


推荐阅读