Попробуйте следующую команду, если вы используете npm 5 и узел 8
npm update --save
Во-первых, при настройке обработчиков сигналов с помощью модуля signal
вы должны создать их в основном потоке. Вы получите исключение, если попытаетесь создать их в отдельном потоке.
Обработчики сигналов, зарегистрированные с помощью функции signal.signal ()
, всегда будут вызываться в основном потоке. В архитектурах, которые поддерживают отправку сигналов в потоки, на уровне C я считаю, что среда выполнения Python игнорирует все сигналы в потоках и имеет обработчик сигналов в основном потоке, который он использует для отправки вашему обработчику сигналов кода Python.
В документации для модуля thread
указано, что исключение KeyboardInterrupt
(которое обычно запускается SIGINT
) может быть доставлено в произвольный поток , если у вас нет доступного модуля signal
, который должен быть во всех системах Unix. В этом случае он доставляется в основной поток. Если вы находитесь в системе без сигнала
, вам нужно будет поймать KeyboardInterrupt
в своем потоке и вызвать thread.interrupt_main ()
, чтобы повторно поднять его. в основном потоке.
Дополнительную информацию можно найти в документации Python для модулей thread
и signal
.
Из документации signal
:
Следует проявлять осторожность, если и сигналы, и потоки используются в одной программе. При одновременном использовании сигналов и потоков необходимо помнить следующее: всегда выполняйте операции
signal ()
в основном потоке выполнения. Любой поток может выполнитьalarm ()
,getsignal ()
,pause ()
,setitimer ()
илиgetitimer ( )
; только основной поток может установить новый обработчик сигнала, и основной поток будет единственным, кто будет получать сигналы (это обеспечивается модулем сигналов Python, даже если реализация основного потока поддерживает отправку сигналов отдельным потокам). Это означает, что сигналы нельзя использовать как средство межпоточного взаимодействия. Вместо этого используйте блокировки.