Какие Python-эквиваленты функций sighold и sigrelse найдены в C? - PullRequest
3 голосов
/ 22 сентября 2008

Похоже, что у сигнального модуля Python нет ничего похожего на функции sighold и sigrelse, найденные в C с использованием signal.h Существуют ли в Python эквиваленты any sort?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 22 сентября 2008

Нет прямых привязок для этого в 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 немного менее асинхронна, чем обычные обработчики сигналов Си.

2 голосов
/ 22 сентября 2008

Нет способа временно "заблокировать" сигналы от критических секций (поскольку это поддерживается не всеми разновидностями Unix).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...