对于X秒,每隔Y秒执行一些操作

时间:2018-01-25 17:11:41

标签: python python-3.x

所以我偶然发现了几乎满足我的问题的答案。

在我的情况下,我想每0.8秒左右在市场上获取限价买单的状态5秒。我找到的代码如下所示:

import threading

def printit():
  threading.Timer(0.8, printit).start()
  print("Hello, World!")

并运行5秒钟,可以执行以下操作:

import time
  t_end = time.time() + 5
  while time.time() < t_end:
    print('Hello World')

但是将这两者结合起来并不会起作用:

while time.time() < t_end:
  printit()

所以我只是想知道如何让printit()每0.8秒运行5秒钟?

2 个答案:

答案 0 :(得分:3)

这是您的线程代码的变体。使用线程的好处是整个程序没有被冻结,因此您可以(例如)在等待时从URL获取一些数据,而不是具有获取 - 睡眠周期。

import threading
import time

def printit(interval, endtime):
    now = time.time()
    if now < endtime:
        threading.Timer(interval, printit, args=[interval, endtime]).start()
        print("Hello", now - t_start)

t_start = time.time()

printit(0.8, t_start + 5)

典型输出

Hello 4.458427429199219e-05
Hello 0.8010139465332031
Hello 1.6028234958648682
Hello 2.4049606323242188
Hello 3.205900192260742
Hello 4.0072197914123535
Hello 4.808593988418579

答案 1 :(得分:1)

你走了!把你的函数调用放在我打印的地方!

import time
totalTime = 5
dt = 0.0

while dt <= totalTime:
    print(dt)
    time.sleep(0.8)
    dt += 0.8