Python Glossary English

все 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Сообщить о неточности