So können, sage ich diesen Code haben:python - Fangen Signale zwischen Schlaf ruft
import signal
from time import sleep
def signalHandler(sig, frame):
print "signalHandler"
while True:
sleep(1)
#print "Caught" # Uncomment this line, and you get multiple signals - commented, you don't.
signal.signal(signal.SIGINT, signalHandler)
while True:
sleep(1)
Wie im Kommentar zu sehen, wenn die print-Anweisung unkommentiert ist, funktioniert der Code normalerweise, und das Signal Handler fangen Jedes nachfolgende CTRL-C drückt wie es sollte. Wenn sie jedoch kommentiert wird, wird niemals ein anderes Signal abgefangen.
Warum ist das? Meine Vermutung ist, dass aufeinanderfolgende Schlafanrufe zusammengemischt werden und die Kontrolle nie wieder bei Python ankommt, um ein Signal zu bekommen. Was müsste es für eine Druckanweisung tun. Kann jemand Einblick in das geben?
Haben Sie versucht, eine 'signal.pause()' hinzuzufügen? Was versuchst du eigentlich? –
Ich versuchte, mehrere CTRL-C-Druckmaschinen zu verarbeiten, und bemerkte dieses Verhalten. Glücklicherweise konnte ich mein Problem mit 'Signal.signal (Signal.SIGINT, Signal.SIG_IGN)' lösen, da das Ignorieren einer anderen CTRL-C-Druckmaschine für mich gut funktioniert. Ich bin nur verwirrt, was Schlaf macht, der das Signal nicht mehr registrieren lässt. – westem