Python: signal.pause () ækvivalent på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har min hoved applikationstråd, der gyder 2 tråde, og jeg fanger SIGINT i min hovedtråd for at afslutte dem pænt.
På Linux bruger jeg signal.pause() og det virker perfekt.


Hvad er den bedste måde at implementere signal.pause () på Windows?


Min grimme løsning er:


my\_queue.get(True, averylongtime)


Og læg noget i my\_queue i min signalhåndterer. Bemærk, at hvis jeg ikke angiver en timeout, er SIGINT ikke fanget. Men jeg spekulerer på, om der er en bedre løsning.


tak skal du have

Bedste reference


Jeg bruger dette:


#another:
while not self.quit:
    # your code

# main
try:
    # your code
except KeyboardInterrupt:
    another.quit = True
    time.sleep(5) # or wait for threading.enumerate() or similar


Hvis jeg vil have det mere robust, siger du også, at du skal gå ud af bugs også:


except KeyboardInterrupt:
    another.quit = True
    signal.alarm(5)
    time.sleep(6)


En bivirkning for dette er, at hver blok hvor du except: eller except Exception, e: (hvilket ikke er noget du skal gøre alligevel/meget) du skal prepend except KeyboardInterrupt: raise, så undtagelsen ikke er ' spist'.

Andre referencer 1


Jeg bruger dette til at fange en ctrl-c på windows. Hvis jeg skriver til et rør eller en fil eller hvad har du .. Jeg vil afslutte yndefuldt. Nedenfor er et legetøjseksempel


import signal
import sys

def signal\_handler(signal, frame):    
    print('Process Interrupted!
a')
    sys.exit(0)

signal.signal(signal.SIGINT,signal\_handler)

#Rest of your code