我有一个包含两个线程的程序:第一个线程不断接收数据,第二个线程一旦接收到一些数据,就会每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分钟打印一次。我该怎么办?
答案 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秒平均打印一次。