擅长:python、mysql、java
<p>Python在<code>SIGINT</code>上安装了一个信号处理程序,它只是设置一个由主解释器循环检查的标志。要使这个处理程序正常工作,Python解释器必须运行Python代码。在</p>
<p>您有几个可用的选项:</p>
<ol>
<li>使用<code>Py_BEGIN_ALLOW_THREADS</code>/<code>Py_END_ALLOW_THREADS</code>来释放C扩展代码周围的GIL。不持有GIL时不能使用任何Python函数,但是Python代码(和其他C代码)可以与C线程并发运行(真正的多线程处理)。一个单独的Python线程可以在C扩展旁边执行并捕捉Ctrl+C信号。在</li>
<li>设置您自己的<code>SIGINT</code>处理程序并调用原始(Python)信号处理程序。然后,<code>SIGINT</code>处理程序可以做任何它需要做的事情来取消C扩展代码并将控制权返回给Python解释器。在</li>
</ol>