gpt4 book ai didi

python - python如何处理信号?

转载 作者:太空狗 更新时间:2023-10-30 01:03:39 25 4
gpt4 key购买 nike

在 python 中处理信号的工作流程是什么?我设置了一个信号处理程序,当信号发生时,python 如何调用我的函数?操作系统是否像 C 程序一样调用它?如果我在 python 的 C 扩展中,它会立即中断吗?


现在我很清楚 python 进程如何处理信号了。当您通过信号模块设置信号时,该模块将注册一个函数 signal_handler(请参阅 $src/Modules/signalmodule.c),它设置您的处理程序并将其标记为 1(Handlers[sig_num].tripped = 1 ;) ,然后调用 Py_AddPendingCall 告诉 python 解释器。 python 解释器将调用 Py_MakePendingCalls 来调用 PyErr_CheckSignals,它在主循环中调用你的函数(参见 $src/Python/ceval.c)。如果您想谈论这个,请与我联系:renenglish@gmail.com

最佳答案

如果您使用信号模块设置 Python 代码信号处理程序,解释器将仅在它重新进入字节码解释器时运行它。处理程序不会立即运行。当信号发生时,它被放入队列中。如果代码路径当前在 C 代码、内置或扩展模块中,则处理程序将延迟,直到 C 代码将控制权返回给 Python 字节代码解释器。这可能会很长一段时间,您无法真正预测多长时间。

最值得注意的是,如果您使用启用了 readline 的交互模式,您的信号处理程序将不会运行,直到您给它一些输入来解释。这是因为输入代码在 readline 库(C 代码)中,并且在它有一个完整的行之前不会返回给解释器。

关于python - python如何处理信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com