擅长:python、mysql、java
<p>如果您试图在释放GIL的代码中处理<code>KeyboardInterrupt</code>(例如,因为它使用<code>cython.parallel.prange</code>),则需要重新获取GIL来调用<code>PyErr_CheckSignals</code>。下面的片段(改编自@nikita nemkin的回答)说明了您需要做什么:</p>
<pre><code>from cpython.exc cimport PyErr_CheckSignals
from cython.parallel import prange
cdef Run(self) nogil:
with nogil:
for i in prange(1000000)
# do some work but check for signals every once in a while
if i % 10000 == 0:
with gil:
PyErr_CheckSignals()
</code></pre>