【问题标题】:Python - Print index of for loop only once every five minutesPython - 每五分钟仅打印一次 for 循环的索引
【发布时间】:2016-04-03 15:18:25
【问题描述】:

我正在尝试获取一个 for 循环以每 5 分钟打印一次 'i' 的值

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

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

但是,此方法会导致代码立即打印 i 的值,因为它会在找到“i”后立即调用“f”。

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

我对 Python 还很陌生,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 你对sleep函数有意见吗?
  • 循环中的睡眠功能会使一切停止,我希望它只是偶尔打印到屏幕上而不减慢进程。

标签: python loops python-3.x for-loop numbers


【解决方案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 来获得现成的解决方案。

【讨论】:

    【解决方案2】:

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

    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)
    

    另请注意,在 python 3.x 之前,xrangerange 更可取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多