2011-06-29 20 views
40

Belirli bir süre sonra bazı iş parçacıklarını sonlandırmak istiyorum. Bu iş parçacığı sonsuz bir döngü sırasında çalışır ve bu süre boyunca rastgele, büyük bir süre duraklayabilirler. İş parçacığı, süre değişkeni tarafından ayarlanan süreden uzun olamaz. Süre olarak ayarlanan uzunluktan sonra, dişler durur.Belirli bir süre sonra bir iş parçacığının durdurulması

def main(): 
    t1 = threading.Thread(target=thread1, args=1) 
    t2 = threading.Thread(target=thread2, args=2) 

    time.sleep(duration) 
    #the threads must be terminated after this sleep 
+2

Son kez sorduğunuzda, iş parçacığının kendilerini sonlandırmasına izin vermenizi öneririz. Neden bunu yapmıyorsun? http://stackoverflow.com/questions/6523526/python-multi-threading-help – Nix

+0

İpucunuz engelleniyor mu? – Nix

+0

Konular sonsuz bir döngüde yayınlanacak. İpliklerin rastgele bir süre uyuyabilme ihtimali vardır. Iş parçacıkları kesinlikle programın başında belirtilen süre boyunca çalışamaz. Eğer iplikler uykuda ne kadar vakit geçirmezse, ne zaman biteceğini bilebilirler. – Takkun

cevap

96

Bu engellemediğinizden eğer çalışacaktır.

Eğer uykular yapmayı planlıyorsanız, uykuyu yapmak için olayı kullanmanız kesinlikle bir zorunluluktur. Eğer olayı uykuya kaldıracak olursanız, bir kişi “uyurken” durmanızı söylerse uyanacaktır. time.sleep() kullanırsanız, iş parçacığınız'dan sonra 'u durduracak ve uyanacaktır.

def main(): 
    t1_stop= threading.Event() 
    t1 = threading.Thread(target=thread1, args=(1, t1_stop)) 

    t2_stop = threading.Event() 
    t2 = threading.Thread(target=thread2, args=(2, t2_stop)) 

    time.sleep(duration) 
    #stop the thread2 
    t2_stop.set() 

def thread1(arg1, stop_event): 
    while(not stop_event.is_set()): 
     #similar to time.sleep() 
     stop_event.wait(time) 
     pass 


def thread2(arg1, stop_event): 
    while(not stop_event.is_set()): 
     stop_event.wait(time) 
     pass 
+0

Geçişe ihtiyacınız yok değil mi? – MaxNoe

+0

'time'' '' stop_event.wait (time) '' '' gibi sayısal bir değişken olması gerekiyor mu, yoksa 'import''daki gibi' 'time' modülü mi? Böyle bir modül kullanmak garip görünüyor, ben de kontrol ediyorum. – mdw7326

+2

Bunu Google'da buldum ve aynı soruyu sordum. bir saniyenin kesiridir. Yani 'stop_event.wait (1)' 1 saniyedir. –

9

Eğer program çıkar (seni örnek ima gibi), o zaman onları daemon threads yaparken ipler durdurmak istiyorsanız.

Eğer iş parçacığınızın komutta ölmesini istiyorsanız, bunu elle yapmanız gerekir. Çeşitli yöntemler vardır, ancak hepsinin çıkıp çıkma zamanı olup olmadığını görmek için iş parçacığınızın döngüsünde bir denetim yapılmasını içerir (bkz. Nix'ın örneği).

İlgili konular