Не удалось прервать многопоточное консольное приложение Python с помощью клавиатуры Ctrl + C в Windows - PullRequest
0 голосов
/ 08 мая 2018

Я не смог прервать свое многопоточное производственное приложение Python, используя Ctrl + C в Windows, оно продолжает работать, пробовал как исключение, так и обработку сигналов.Вот очень упрощенная версия кода, которая не прерывает.Однопоточное приложение завершается нормально, так же, как и многопоточная версия Linux.Кто-нибудь может помочь с этой проблемой?Заранее спасибо.

import threading
import time

class FooThread(threading.Thread):
    stop_flag = False

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while not self.stop_flag:
            print(1)
            time.sleep(1)

t = FooThread()
t.start()

try:
    t.join()
except KeyboardInterrupt:
    t.stop_flag = True
    t.join()

1 Ответ

0 голосов
/ 08 мая 2018

Вы сделали свой поток демоном, но вам также нужно поддерживать "основной" поток живым, чтобы прослушивать сигнал или прерывание клавиатуры

Простая рабочая реализация с сигналом:

import threading
import time
import sys
import signal

class FooThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        while not self.stop_flag:
            print(1)
            time.sleep(1)

    stop_flag = False

def main():
    t = FooThread()
    def signal_handler(signal, frame):
        print('You pressed Ctrl+C!')
        t.stop_flag = True
        t.join()

    signal.signal(signal.SIGINT, signal_handler)
    t.start()

    while not t.stop_flag:
        time.sleep(1)

if __name__ == "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...