Birincisi, signal
modülü kullanarak sinyal işleyicileri kurarken, ana başlık adı altında oluşturmanız gerekir. Bunları ayrı bir iş parçacığında oluşturmaya çalışırsanız bir istisna alırsınız.
signal.signal()
işlevi aracılığıyla kaydedilen sinyal işleyicileri her zaman ana iş parçacığında çağrılır. C seviyesinde dişlere sinyal göndermeyi destekleyen mimarilerde, Python çalışma zamanının iplikteki tüm sinyalleri göz ardı ettiğine ve Python-kod sinyali işleyicinize göndermek için kullandığı ana iş parçasında bir sinyal işleyicisine sahip olduğuna inanıyorum. thread
modülü için
belgeleri tüm Unix sistemleri olmalıdır sizin için kullanılabilir signal
modülü, yoksa (normalde SIGINT
tarafından tetiklenir) KeyboardInterrupt
istisna delivered to an arbitrary thread olabilir belirtmektedir. Bu durumda, ana iş parçacığına teslim edilir. signal
olmadan bir sistemdeyseniz, iş parçanızda KeyboardInterrupt
'u yakalamanız ve ana iş parçacığında yeniden yükseltmek için thread.interrupt_main()
'u aramanız gerekir.
Daha fazla bilgi, thread
ve signal
modülleri için Python belgelerinde bulunabilir.
İlginç, ben sadece ana iş parçacığı 'KeyboardInterrupt's alacağını düşündüm. –
Evet! Kimin neden olmadığını biliyor. –
Deneyimimde ve belgelerimi okuduğumda, 'signal' modülü mevcut olduğunda' KeyboardInterrupt' yalnızca ana konuya iletilir. – Miles