2016-04-03 174 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