Каковы эквиваленты функций Sigold и sigrelse в C в Python?

StackOverflow https://stackoverflow.com/questions/113170

  •  02-07-2019
  •  | 
  •  

Вопрос

Похоже, что сигнальный модуль 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).

https://docs.python.org/library/signal.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top