SORU
5 AĞUSTOS 2012, Pazar


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
5 AĞUSTOS 2012, Pazar


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • Liam Underwood

    Liam Underwo

    19 Mayıs 2009
  • TV and Lust

    TV and Lust

    26 HAZİRAN 2006