2016-04-03 173 views
0

我试图得到一个for循环输出的“我”,每5分钟的Python - for循环每五分钟一次的打印指数

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

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

但是值,在代码中此方法将导致打印我立即打印的价值,因为它一找到'我'就立即调用'f'。

我知道这不是第一次有人会问,也不是最后一次,但我不能让它在嵌套在函数中的for循环上工作。

我对Python很新,我很感激任何帮助。

+0

你有什么反对'睡眠'功能? – MANA624

+0

循环中的睡眠功能会让所有的事情都停下来,我希望它只偶尔打印到屏幕上,而不会减慢过程。 –

回答

1

如何跟踪循环中已经过了多长时间?

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 

我想你可以通过每N次迭代而不是每次都检查一次,从而提高效率。您也可以考虑使用progressbar2作为现成的解决方案。

0

我更喜欢使用datetime,因为我认为它更直观,看起来更清洁。否则,使用或多或少相同的方法,保罗:

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) 

还要注意的是蟒蛇之前3.X xrange将是可取的了range