Kunne ikke afbryde den trådløse Python-konsolapp ved hjælp af tastaturet Ctrl + C på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kunne ikke afbryde min trådløse Python-produktionsapp ved hjælp af Ctrl + C på Windows, den fortsætter med at køre, forsøgte både undtagelse og signalhåndtering. Her er en meget forenklet version af kode, der ikke afbryder. Enkelt tråd app ophører fint, samme som multithreaded Linux version. Kunne nogen hjælpe med dette problem? Tak på forhånd.


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()

Bedste reference


Du har lavet din tråd en dæmon, men du skal også holde din 'hoved' tråd levende for at lytte efter et signal eller tastaturafbrydelse


En enkel implementering af arbejdet med et signal:


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()