0

在 python 中,我一直在使用 sleep 每小时、每分钟或每天执行一段循环代码。问题是脚本需要大约 1-3 秒才能运行。如何确保脚本在下一分钟到来时开始,例如我启动脚本并且当前分钟还剩 20 秒。

使用时间我得到这些结果,请注意我每秒都会失去精度:

Waiting for next half min.
2013-09-14 15:46:53.850068
307
Waiting for next half min.
2013-09-14 15:47:24.158642
307
Waiting for next half min.
2013-09-14 15:47:54.717070
302
Waiting for next half min.
2013-09-14 15:48:25.296409
325
Waiting for next half min.
2013-09-14 15:48:55.506098
4

2 回答 2

1

我认为您对时间安排的不精确是由于不可预测的 python 解释器启动时间。

如果您需要确保您的实际代码在准确的时间开始执行,您可以执行以下操作:

  • 让你的脚本比你需要的早一点运行
  • 在脚本中:

    import time
    import datetime
    
    schedule_time = ... # parse sys.argv or whatevs
    
    # this will wait exactly as much time as it is left before the schedule
    time.sleep((schedule_time - datetime.datetime.now()).total_seconds())
    # ... your code
    
于 2013-09-14T22:38:55.497 回答
0

每次代码运行后,您都需要计算出适当的睡眠时间。以下代码执行此操作,并且还尝试在工作任务花费的时间超过延迟间隔的情况下赶上。

import time

# Get the start time, also the time of the next (first) iteration
lTimeNext = time.time()

# Set up the delay time
lDelay = 30

# Loop, doing work
while True:

  # Do Work
  print "Working!"

  # Work out when to do the next work item
  lTimeNext += lDelay

  # Sleep until the next work is required
  lSleepTime = lTimeNext - time.time()
  if lSleepTime > 0:
    time.sleep(lSleepTime)
于 2013-09-15T16:00:37.780 回答