如何在Python中同时运行含input的无限循环与时间更新循环?
解决方案
要同时运行输入交互和时间更新任务,使用threading库完全可行,之前的问题可能是线程配置或资源占用导致的。以下是调整后的实现方案:
完整代码
import datetime import threading import time memory = { "time": datetime.datetime.now() } def update_time(): while True: memory["time"] = datetime.datetime.now() time.sleep(0.1) # 避免高频循环占用过多CPU,可按需调整间隔 def code(): while True: command = input("Z>").strip() commandl = command.lower() # 示例:输入time时打印当前存储的时间 if commandl == "time": print(f"当前时间:{memory['time']}") elif commandl == "exit": break # 其他命令逻辑补充在这里 if __name__ == "__main__": # 启动时间更新线程,设置为守护线程随主线程退出 time_update_thread = threading.Thread(target=update_time, daemon=True) time_update_thread.start() try: code() except KeyboardInterrupt: print("\n程序已退出")
关键说明
- 守护线程配置:通过
daemon=True将时间更新线程设为守护线程,这样当主线程(处理输入的code()函数)退出时,子线程会自动终止,不会残留后台进程。 - CPU资源优化:在
update_time的循环中添加time.sleep(),避免无限循环持续占用CPU。根据时间精度需求调整间隔,0.1秒的间隔既保证时间更新足够及时,又不会过度消耗资源。 - 线程安全保障:
memory["time"]的赋值操作是原子性的(直接替换整个datetime对象),无需额外加锁,多线程访问不会出现数据不一致问题。 - 输入交互兼容性:主线程负责处理
input()阻塞操作,子线程在后台独立更新时间,两者互不干扰,完全适配终端输入场景。
内容的提问来源于stack exchange,提问作者Wolf
相关产品推荐
相关产品推荐

