Похоже, что подпроцесс SIGCHLD принимается не рабочим потоком, а родителем.Это означает, что process.wait () не будет сигнализироваться операционной системой.Здесь есть еще одно обсуждение .
Похоже, что дочерний наблюдатель должен обнаружить SIGCHLD и распространить его на другие потоки (или pids) и их циклы событий, что также кажетсябыть его главной целью дизайна.(Документация отсутствует, поэтому требуется чтение исходного кода.)
Примечание: я думаю, что t.join () блокирует основной поток , который запускает дочерний наблюдатель, так чтодолжен быть исправлен.Я просто поместил цикл while и завершил основной цикл обработки событий, когда t.is_alive () возвращает False.
Я заметил, что signal_noop срабатывает, так что это хорошо.Кажется, проблема связана с signal.set_wakeup_fd (self._csock.fileno ()), который, кажется, установлен правильно.Мне нужно немного больше отладить, чтобы узнать, как обрабатывается это событие и почему основной цикл событий не получает этот сигнал.Я сейчас замечаю, что _process_self_data (self, data) в unix_events.py не происходит.
Сигналы и потоки
Обработчики сигналов Python всегда выполняются в основном потоке Python, даже если сигнал был получен в другом потоке.Это означает, что сигналы не могут использоваться как средство межпотоковой связи.Вместо этого вы можете использовать примитивы синхронизации из потокового модуля.
Кроме того, только основной поток может устанавливать новый обработчик сигнала.