Python信号处理程序的执行



我是python新手。我想了解python是如何执行信号的,我开始阅读官方文档。下面的语句没有意义

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

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

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

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

由于每个进程都有自己的信号队列,因此进程中的每个线程都有自己的信号队列。但是线程信号队列是它自己的队列和进程队列的联合;这就是POSIX线程的建模方式。这个特性被用于线程间通信(使用pthread_sigmask和sigwait实现)。但蟒蛇不是这样的。Python信号处理程序总是在主解释器的主Python线程中执行,并且只允许主解释器的主线程设置新的信号处理程序。

最新更新