Ctrl-C ile Python betiği öldürmek
Aşağıdaki komut ile Python diş çekme test ediyorum:
import threading
class FirstThread (threading.Thread):
def run (self):
while True:
print 'first'
class SecondThread (threading.Thread):
def run (self):
while True:
print 'second'
FirstThread().start()
SecondThread().start()
Bu web geliştirme-11.10 üzerinde Python 2.7 çalışıyor.CtrlCöldürecek değil. Ben de sistem sinyalleri için bir işleyicisi ekleyerek denedim, ama yardım etmedi:
import signal
import sys
def signal_handler(signal, frame):
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
Arka plan için program gönderdikten sonra PID ile öldürüyorum süreci öldürmek içinCtrlZumursanmamaktan değil., NedenCtrlCumursanmamaktan ısrarla? Bunu nasıl çözebilirim?
CEVAP
CtrlCsalondaki ana konu, ama konuları daemon modunda değil, çünkü gitmesini sağlıyor ve bu süreci canlı tutuyor. Onları cinleri yapabiliriz:
f = FirstThread()
f.daemon = True
f.start()
s = SecondThread()
s.daemon = True
s.start()
Ama sonra başka bir sorun var - ana iş parçacığı iş parçacığı başladıktan sonra, hiçbir şey yapmak için başka bir şey yok. Yani çıkar ve konuları anında yok edilir. Yani ana konu canlı kalsın:
import time
while True:
time.sleep(1)
Şimdi baskı devam edecek 'ilk' ve 'ikinci' vurmak kadarCtrlC.
Düzenleme:ziyaretçi belirttiği gibi, daemon konuları geçici dosyaları gibi şeyleri temizlemek için bir şans olmayabilir. Eğer ihtiyacınız varsa, daha sonra ana iş parçacığı KeyboardInterrupt
yakalayıp koordine ve kapatma temizleme var. Ama birçok durumda, daemon konuları aniden ölmesi yeterince iyi herhalde.
Nasıl bir python betiği bir hizmet ya ...
Bir python betiği ile bir ekran görünt...
Nasıl bir Python betiği profilini çıka...
Windows bir hizmet olarak bir Python b...
Nasıl Python betiği tek başına HERHANG...