如何在Python中实现无操作超时自动备份的计时器?
需求与问题
我需要在Python中实现一个无操作计时器:当用户超过10分钟没有输入时,自动将会话数据备份到独立的JSON文件。但目前遇到两个难点:
- 若使用“有输入就终止”的无限循环,会阻塞其他代码执行;
- 传统用
time.time()计算代码段执行时长的方式不适用,我要监控的是用户的无操作间隔,而非某段代码的运行时间。
以下是需要适配该功能的简化代码:
def run(self): run = True while run: command_input = input("Please type your command"): # 需要实现:有输入则执行对应操作,无操作超10分钟触发备份 if command == "a": function_one() else: function_two()
适配后的解决方案
采用多线程方案可以解决这个问题:主线程处理用户输入并更新最后操作时间,同时启动一个独立线程专门监控无操作时长,达到阈值时自动执行备份。
import time import threading class Session: def __init__(self): self.last_command_timing = time.time() def run(self): run = True # 启动后台监控线程,主线程结束时自动退出 threading.Thread(target=self.check_time_limit, daemon=True).start() while run: command_input = input("Please type your command: ") command = command_input.strip() if command == "a": self.last_command_timing = time.time() function_one() else: self.last_command_timing = time.time() function_two() def check_time_limit(self): while True: # 检查是否超过10分钟(600秒) if time.time() - self.last_command_timing > 600: self.backup_function() break # 每秒检查一次,降低CPU占用 time.sleep(1) def backup_function(self): # 在此实现会话数据备份到JSON文件的逻辑 print("会话数据已自动备份") # 示例功能函数 def function_one(): print("执行功能A") def function_two(): print("执行功能B")
关键说明
- 监控线程设置为守护线程(
daemon=True),确保主线程退出时该线程自动终止,避免残留后台进程; - 监控线程中加入
time.sleep(1),避免高频循环占用过多CPU资源; - 每次用户输入后更新
last_command_timing,保证计时的准确性。
内容的提问来源于stack exchange,提问作者Mahmoud Hosny
相关产品推荐
相关产品推荐

