python-3.x - Python 信号处理程序的执行
问题描述
我是 python 新手。我想了解python如何执行信号。我开始阅读官方文档。以下陈述没有意义
1.Python 信号处理程序不会在低级 (C) 信号处理程序内部执行。相反,低级信号处理程序设置一个标志,告诉虚拟机稍后执行相应的 Python 信号处理程序(例如在下一个字节码指令处)。
2.“Python 信号处理程序总是在主解释器的主 Python 线程中执行,即使信号是在另一个线程中收到的。” 有人能帮我吗
解决方案
当您注册信号处理程序时,您主要选择信号的异步处理。当接收到信号时,代码执行跳转到那些注册的信号处理程序(有异常检查sigaction
)。您不能在信号处理程序中做太多事情,只有调用async-signal-safe
函数是安全的。
当收到信号时,Python 不会立即跳转到信号处理程序(由用户注册),而是跳转到低级 C 信号处理程序,它只是将稍后执行的内容排队(请参阅此答案)
由于每个进程都有自己的信号队列,因此进程中的每个线程都有自己的信号队列。但是线程信号队列是自身队列与进程队列的并集;这就是 POSIX 线程的建模方式。并且此功能用于线程间通信(使用pthread_sigmask和sigwait实现)。但python并非如此。Python 信号处理程序总是在主解释器的主 python 线程中执行,并且只允许主解释器的主线程设置新的信号处理程序。
推荐阅读
- node.js - 如何在我的 Express 应用程序中的任何地方重用相同的 sequelize 连接?
- javascript - 是否可以使用javascript显示然后关闭一个只有一个按钮的文本块?
- visual-studio - 如何在 Visual Studio 2017 社区中获取 NuGet 选项?
- python - 如何在列表中查找以用户要求的某个字母开头的单词
- html - 为什么不应用此 CSS 边距 0?
- r - R中的条形图代码在函数外部但不在内部工作
- android - Opencv 在 Android 启动时崩溃
- sas - 此范围重复或重叠
- java - W/System.err:org.json.JSONException:值