2016-04-03 14 views
0

Ben, 'i' her 5 dakikada Ancak Python - döngü sadece bir kez her beş dakikada Baskı endeksi

import threading 
def f(i): 
    print(i) 
    threading.Timer(600, f).start() 

for i in range(1,1000000000000): 
    f(i=i) 

değerini yazdırmak için döngü için almak için kod bu yöntem sonuçlarını çalışıyorum 'i' kelimesini bulduğu anda 'f' dediği andan itibaren değerinin basılması.

Bunun birisinin ilk kez sormayacağı, ne de sonuncusu olduğunu biliyorum, ancak bir işlev içinde iç içe geçmiş bir döngü üzerinde çalışamıyorum.

Python'a oldukça yeniyim ve herhangi bir yardımı takdir ediyorum.

+0

'Sleep' işlevine karşı bir şeyiniz var mı? – MANA624

+0

Bir döngü içindeki bir uyku işlevi herşeyi durduracak, yalnızca işlemi yavaşlatmaksızın yalnızca ekrana yazdırılmasını istiyorum. –

cevap

1

Döngüde ne kadar süre geçtiğini takip etmek nasıl olur?

from timeit import default_timer as timer 

start = timer() 

freq = 5 * 60  # Time in seconds 
last_time = 0.0 
for i in range(int(1e8)): 
    ctime = timer() 
    if ctime - last_time > freq: 
     print(i) 
     last_time = ctime 

Bunu her zamankinden çok her N yinelemeyi zamanlayarak kontrol ederek daha verimli hale getirebileceğinizi hayal ediyorum. Hazır bir çözüm için progressbar2'u kullanmayı da düşünebilirsiniz.

0

Daha sezgisel olduğunu ve biraz daha temiz olduğunu düşündüğüm için datetime kullanmayı tercih ediyorum. Aksi takdirde, Paul olarak az ya da çok aynı yaklaşımı kullanarak:

from datetime import datetime, timedelta 

print_interval = timedelta(minutes=5) 

# Initialize the next print time. Using now() will print the first 
# iteration and then every interval. To avoid printing the first 
# time, just add print_interval here (i.e. uncomment). 
next_print = datetime.now() # + print_interval 

for i in range(int(1e8)): 
    now = datetime.now() 
    if now >= next_print: 
     next_print = now + print_interval 
     print(i) 

Ayrıca piton önce 3.x xrangerange üzerinde tercih olacağını unutmayın.