2011-01-18 21 views
6

Bir seferde birkaç saate kadar çalışan bir döngü var. Nasıl ayarlanmış bir aralıkta ne kadar süredir olduğunu nasıl anlatabilirim?python -> zaman bir süre döngü çalışıyor

sadece jenerik ...

EDIT soru: Bu permütasyon çalışan bir while döngüsü, bu yüzden ben her 10 saniyede çalışma süresini yazdırmak sahip olabilir?

cevap

8

yerine her döngü süresini kontrol etmek, sen

import time 
from threading import Timer 

def timeout_handler(timeout=10): 
    print time.time() 
    timer = Timer(timeout, timeout_handler) 
    timer.start() 

timeout_handler() 
while True: 
    print "loop" 
    time.sleep(1) 
+1

+1 Cevabımdan çok daha güzel, pythonun bu tür pilleri de içerdiğine bayılıyorum. – fmark

1

Bunu time.asctime() kullanarak yapmak için çok kolay bir yol var. While döngüsüne girmeden önce ve döngüün kendisinde bir yerde saklarsınız. Kaydedilen zaman ile geçerli saat arasındaki zaman farkını hesaplayın ve eğer bu fark 10 saniyeyse, saklanan zamanı geçerli saate göre güncelleyin ve çalışmakta olduğunu yazdırın. Bununla birlikte, bu, bükülmüş ve sıkıcı bir matematik gerektirdiği için bunu yapmak çok kolay bir yoldur.

amacınız belirli bir algoritma çalışma zamanını kontrol etmek ise, o zaman bu

belirtildiği gibi
2

yardımcı olur

Umut timeit modülü kullanarak daha iyi olur, burası pis kesmek biraz öyle Her yinelemenin zamanını kontrol etmeyi gerektirdiği için. Çalışması için, zaman aşımının küçük bir yüzdesiyle çalıştırılan görevlere sahip olmanız gerekir; eğer döngünüz her dakika yinelenirse, her on saniyede bir çıkmaz. Eğer kesintiye uğrayacaksanız, multithreading'i veya tercihen linux/mac/unix, sinyalleri üzerindeyebilirsiniz. Platformunuz nedir?

import time 

timeout = 10 
first_time = time.time() 
last_time = first_time 
while(True): 
    pass #do something here 
    new_time = time.time() 
    if new_time - last_time > timeout: 
     last_time = new_time 
     print "Its been %f seconds" % (new_time - first_time) 

Çıktı:

Its been 10.016000 seconds 
Its been 20.031000 seconds 
Its been 30.047000 seconds 
+0

Ohmygosh seni seviyorum ama 'pass' ne yapar bir Timer nesnesi kullanabilir? Bunun yerine bir şey koydum mu? – tekknolagi

+1

'pass' boş işlemdir, sadece bir yer tutucudur ve hiçbir şey yapmaz ([gerçekten] (http://docs.python.org/reference/simple_stmts.html#pass)). Sadece kendi kodunuzla değiştirin. – fmark

+1

Hmm, 'Timer' nesnesini bilmiyordum, aşağıdaki cevabı kullanarak kullanmaya başlamanızı öneririm. – fmark