Python 在X秒内,每Y秒做一些动作

Python 在X秒内,每Y秒做一些动作,python,python-3.x,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_

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

在我的例子中,我希望每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')
导入时间
t_end=time.time()+5
当time.time()结束时:
打印('Hello World')
但把这两个结合起来是行不通的:

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

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

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

import time
totalTime = 5
dt = 0.0

while dt <= totalTime:
    print(dt)
    time.sleep(0.8)
    dt += 0.8
导入时间
总时间=5
dt=0.0

而dt给你!把你的函数调用放在我打印的地方

import time
totalTime = 5
dt = 0.0

while dt <= totalTime:
    print(dt)
    time.sleep(0.8)
    dt += 0.8
导入时间
总时间=5
dt=0.0

而dt这里是线程代码的一个变体。使用线程的好处是整个程序不会被冻结,因此您可以(例如)在等待时从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)

这里是线程代码的变体。使用线程的好处是整个程序不会被冻结,因此您可以(例如)在等待时从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)

这不是一个非常健壮的解决方案,因为
时间。睡眠
不精确。这几乎肯定需要6秒以上才能完成(特别是因为你在最后一次睡眠中又睡了一段时间)。不过,对于控制台应用程序来说,这是一个很好的快速解决方案。@AdamSmith他确实说过“0.8秒左右”作为参考@isquared KeepitReal注意,
sleep
将使整个程序(至少)在指定的时间间隔内休眠。这可能没问题,但如果你不想发生这种情况,那么你应该使用线程。这不是一个非常健壮的解决方案,因为
time。sleep
是不精确的。这几乎肯定需要6秒以上才能完成(特别是因为你在最后一次睡眠中又睡了一段时间)。不过,对于控制台应用程序来说,这是一个很好的快速解决方案。@AdamSmith他确实说过“0.8秒左右”作为参考@isquared KeepitReal注意,
sleep
将使整个程序(至少)在指定的时间间隔内休眠。这可能没问题,但如果你不想发生这种情况,那么你应该使用线程。我希望看到使用异步协程。我可能会在午餐时玩这个,我还没有用async/Wait做太多。回答得好@PM2Ring@AdamSmith去年我对async做了一点了解,但我几乎忘记了我学到的一切@PM2Ring我记得我看着它,愤怒地嘲笑着,心想“如果我想做这件事,我会用围棋来写的。”哦,我仍然为自己感到骄傲,然后……)我希望看到使用异步协程实现这一点。我可能会在午餐时玩这个,我还没有用async/Wait做太多。回答得好@PM2Ring@AdamSmith去年我对async做了一点了解,但我几乎忘记了我学到的一切@PM2Ring我记得我看着它,愤怒地嘲笑着,心想“如果我想做这件事,我会用围棋来写的。”哦,我仍然为自己感到骄傲,然后……)