все Python 3signalфункция
signal.set_wakeup_fd()
обработчики
Назначает дескриптор, в который при каждом сигнале с обработчиком пишется байт с его номером, — чтобы будить select и циклы событий.
Синтаксис
old_fd = signal.set_wakeup_fd(fd, *, warn_on_full_buffer=True)
Дескриптор обязан быть неблокирующим, иначе запись из обработчика может повесить процесс, — обычно это пара сокетов или os.pipe с os.set_blocking(fd, False). Байт пишется только для сигналов, у которых есть обработчик. Wakeup-fd один на процесс, и asyncio его уже занимает: функция возвращает прежний — верните его потом. Вызывать можно только из главного потока.
Примеры
import signal, socket
r, w = socket.socketpair()
w.setblocking(False)
old = signal.signal(signal.SIGTERM, lambda s, f: None) # без обработчика байта не будет
print(signal.set_wakeup_fd(w.fileno())) # → -1 — раньше не было
signal.raise_signal(signal.SIGTERM)
print(r.recv(1)[0] == signal.SIGTERM) # → True
signal.set_wakeup_fd(-1)
signal.signal(signal.SIGTERM, old)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности