Можем ли мы запустить прерывание клавиатуры в QThread?

#python #multithreading #pyqt5 #qthread #keyboardinterrupt

Вопрос:

Я использую графический интерфейс pyqt5 для запуска сценария в QThread. Этот скрипт может перехватывать и обрабатывать KeyboardInterrupt , и я хочу запустить его, например, при нажатии кнопки.

Можно ли эмулировать/выбросить a KeyboardInterrupt в поток?

Я ищу что-то вроде этого:

 self.cancel_button.pressed.connect(self.throw_keyboard_interrupt)  self.thread = QThread() . . . self.thread.start()  def throw_keyboard_interrupt(self):  self.thread."throw keyboard interrupt into thread"()  

Комментарии:

1. Когда вы говорите «запустить сценарий», вы имеете в виду, что ваш поток запускает отдельный процесс? Вы, конечно, можете отправить сигнал SIGINT другому процессу, но сигналы-это процессы, а не потоки. Если вы отправляете себе SIGINT, это влияет на ваш процесс.

2. да, в отдельной теме. Я создаю графический интерфейс для управления сценарием, предназначенным для обработки прерываний клавиатуры, я хочу, чтобы у меня была кнопка «отмена», которая запускает это прерывание клавиатуры

3. Вы прочитали мой вопрос? Потому что ты не ответил на него. Ваш поток запускает другой процесс ( subprocess например , с помощью) или вы просто запускаете локальную функцию Python?

4. извините, это просто поток (Q), а не процесс. но если у вас есть решение, которое работает с процессами, меня это тоже интересует. Я могу перейти к реализации процесса

5. Вы можете использовать os.kill(pid, signal.SIGINT) для отправки прерывания с клавиатуры в процесс. И я немного соврал; существует API (pthread_kill) для отправки сигнала потоку, но я никогда не видел, чтобы он был открыт для Python.