您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Cython,Python和KeyboardInterrupt被忽略

Cython,Python和KeyboardInterrupt被忽略

您必须定期检查未决信号,例如,在模拟循环的第N次迭代中:

from cpython.exc cimport PyErr_CheckSignals

cdef Run(self):
    while True:
        # do some work
        PyErr_CheckSignals()

PyErr_CheckSignals将运行与信号模块一起安装的信号处理程序(KeyboardInterrupt必要时包括升高)。

PyErr_CheckSignals速度非常快,可以经常调用它。请注意,应该从主线程调用它,因为Python在主线程中运行信号处理程序。从辅助线程调用它无效。

由于信号是在不可预测的时间异步传递的,因此直接从信号处理程序运行任何有意义的代码是有问题的。因此,Python将传入的信号排队。稍后将其作为解释器循环的一部分进行处理。

如果您的代码已完全编译,则解释器循环将永远不会执行,并且Python没有机会检查和运行排队的信号处理程序。

python 2022/1/1 18:27:55 有200人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶