【问题标题】:Python - Loop 100 times over a specified timePython - 在指定时间内循环 100 次
【发布时间】:2013-01-28 14:35:07
【问题描述】:

我正在考虑在 Python 中创建一个随机化脚本,以在特定时间内执行一个循环。如果我想在 5 天内随机运行 100 次循环,那么最好的方法是什么?

【问题讨论】:

    标签: python loops time


    【解决方案1】:

    沿区间选取一百个均匀分布的随机点,在它们之间休眠:

    import random, time
    
    DURATION = 5 * 86400  # five days
    EXECS = 100
    
    now = time.time()
    points = sorted(random.random() * DURATION + now
                    for i in xrange(EXECS))
    
    for p in points:
       now = time.time()
       if p > now:
           time.sleep(p - now)
       # run your loop here
    

    【讨论】:

    • 感谢您提供正确的代码...我也有同样的想法 ;-) 但在您的标题中,您可能说的是 100 分?
    • @zen 你是对的,现在更正了。您的答案中的伪代码看起来很相似,但重要的区别在于它在两次运行之间忙循环,这对于打算连续运行数天的程序来说是不可接受的。
    • 是的,我意识到了,所以我添加了评论。
    【解决方案2】:

    您可以“预先计划”您的随机时间,以便在您的时间范围内完美匹配。这假设您的循环时间在天数范围内是微不足道的(对于 100 次运行)。如果您想非常准确,则需要添加一些内容

    import random, time
    
    def Rand_Run(func, time_range, num_runs):
        # time range passed as days / convert to seconds
        time_range = time_range*3600*24
    
        # create a list of random numbers and a scaling factor for your time period
        r_items = [random.random() for i in xrange(num_runs)]
        r_scale = time_range/sum(r_items)
    
        # create the list of time delays between runs
        r_time_delays = (r_item*r_scale for r_item in r_items)
    
        # run the function between random time delays
        for r_time_delay in r_time_delays:
            func()
            time.sleep(r_time_delay)
    

    【讨论】:

      【解决方案3】:

      不是 Python,而是一些想法:

      duration = 5*24*60*60 //duration in seconds
      for i = 0 to 99
          array(i)=rand()*duration
      end
      sort array
      counter=0
      while time_elapsed<duration
          if (time_elapsed>=array(counter))
              DO SOMETHING
              counter=counter+1
          end
      end
      

      【讨论】:

      • DO SOMETHING 是您可以调用“循环”的地方,而不是围绕它的while循环,您还可以让您的设备进入睡眠状态。计数器增加后:SLEEP(array(counter)-time_elapsed) 或其他告诉系统等待下一次运行的时间。
      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2015-03-15
      • 2018-08-19
      • 2018-06-22
      相关资源
      最近更新 更多