Python シグナル モジュールには、signal.h を使用して、C で見られる sighold および sigrelse 関数に似たものはないようです。あらゆる種類のPythonに相当するものはありますか?
どうもありがとう!
クリティカル セクションからのシグナルを一時的に「ブロック」する方法はありません (これは、すべての Unix フレーバーでサポートされているわけではないためです)。
Python では、これに対する直接のバインディングはありません。ctypes を介してそれらにアクセスするのは簡単です。ここに例があります。
import ctypes, signal
libc = ctypes.cdll.LoadLibrary("libc.so.6")
libc.sighold(signal.SIGKILL)
libc.sigrelse(signal.SIGKILL)
私はこれらの呼び出しの使用に慣れていませんが、Python のシグナル ハンドラーは C とは異なる動作をすることに注意してください。Python コードがシグナル コールバックにアタッチされると、シグナルはインタープリターの C 側でキャッチされ、キューに入れられます。インタープリターは、内部のハウスキーピング (およびスレッド切り替えなど) のために時々中断されます。その割り込み中に、シグナルの Python ハンドラが呼び出されます。
つまり、Python のシグナル処理は、通常の C シグナル ハンドラーよりも非同期性が少し低いことに注意してください。