Каковы эквиваленты функций Sigold и sigrelse в C в Python?
Вопрос
Похоже, что сигнальный модуль Python не имеет ничего похожего на функции Sigold и sigrelse, найденные в C, с использованием signal.h.Существуют ли эквиваленты Python для любой Сортировать?
Большое спасибо!
Решение
В 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.
Другие советы
Невозможно временно «заблокировать» сигналы из критических секций (поскольку это поддерживается не всеми разновидностями Unix).