如何清楚地在`print`之间执行延迟?

时间:2019-06-25 18:27:50

标签: python

我有一个包含两个线程的程序:第一个线程不断接收数据,第二个线程一旦接收到一些数据,就会每60秒处理一次。

在第二个线程中,还发生了某种“调试”打印,我需要在两次打印之间将速度减慢到3分钟。

这大致是正在发生的事情的伪代码:

def data_stream():
    data.append(new_data)

def process_data():
    data.update()
    print(data)
    time.sleep(60)

def main():
    # I handle threading here

如您所见,我想在打印之前添加if语句或其他内容,以确保每3分钟打印一次。我该怎么办?

1 个答案:

答案 0 :(得分:0)

将计数器初始设置为0。每次process_data从睡眠状态唤醒(每60秒)时,它将使计数器递增1。当计数器达到3时,自上次打印以来已为180秒或3分钟。因此,它发出打印操作并将计数器重置为0。

OR

如果睡眠时间可变:

通过调用time.time()+ 180来初始化变量next_print_time,而不是计数器。这将是您要进行下一个打印操作的时间。然后,每次唤醒时,调用time.time()并将结果与​​next_print_time进行比较,以确定是否应该打印,如果刚刚打印,则计算并保存一个新值next_print_time。当它变得有点棘手时 N,函数调用之间的秒数不均分180。如果N远小于180,则仅将当前时间与next_print_time进行比较就足够了;如果大于,则进行打印。但是,假设N为80。经过2次通话,您还有20秒的时间。但是,如果您再等一个电话,您将迟到60秒。在那种情况下,我现在要打印。 但是在计算下一个到期时间next_print_time时,我总是将next_print_time的当前值加180,以便您每180秒平均打印一次。