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

  • max2sims2

    max2sims2

    19 Kasım 2008
  • mipd1980

    mipd1980

    25 EKİM 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011