Каков поток Python + семантика сигналов Unix?

Попробуйте следующую команду, если вы используете npm 5 и узел 8

npm update --save

8
задан Joe Shaw 28 July 2009 в 14:54
поделиться

2 ответа

Во-первых, при настройке обработчиков сигналов с помощью модуля signal вы должны создать их в основном потоке. Вы получите исключение, если попытаетесь создать их в отдельном потоке.

Обработчики сигналов, зарегистрированные с помощью функции signal.signal () , всегда будут вызываться в основном потоке. В архитектурах, которые поддерживают отправку сигналов в потоки, на уровне C я считаю, что среда выполнения Python игнорирует все сигналы в потоках и имеет обработчик сигналов в основном потоке, который он использует для отправки вашему обработчику сигналов кода Python.

В документации для модуля thread указано, что исключение KeyboardInterrupt (которое обычно запускается SIGINT ) может быть доставлено в произвольный поток , если у вас нет доступного модуля signal , который должен быть во всех системах Unix. В этом случае он доставляется в основной поток. Если вы находитесь в системе без сигнала , вам нужно будет поймать KeyboardInterrupt в своем потоке и вызвать thread.interrupt_main () , чтобы повторно поднять его. в основном потоке.

Дополнительную информацию можно найти в документации Python для модулей thread и signal .

9
ответ дан 5 December 2019 в 13:00
поделиться

Из документации signal :

Следует проявлять осторожность, если и сигналы, и потоки используются в одной программе. При одновременном использовании сигналов и потоков необходимо помнить следующее: всегда выполняйте операции signal () в основном потоке выполнения. Любой поток может выполнить alarm () , getsignal () , pause () , setitimer () или getitimer ( ) ; только основной поток может установить новый обработчик сигнала, и основной поток будет единственным, кто будет получать сигналы (это обеспечивается модулем сигналов Python, даже если реализация основного потока поддерживает отправку сигналов отдельным потокам). Это означает, что сигналы нельзя использовать как средство межпоточного взаимодействия. Вместо этого используйте блокировки.

4
ответ дан 5 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: