Python删除文件行后程序内未实时更新,无需重启如何实现?
问题根因
- 内存中的账号列表
self.username_list仅在类初始化时从文件读取一次,后续修改磁盘文件不会自动同步到该内存变量 - 任务队列
self.userQ中缓存了历史账号数据,且队列重载方法reloadQ是从已过时的self.username_list读取数据,因此已删除的账号仍然会被程序调用
修复方案
执行删除文件操作后,同步更新内存里的账号列表,同时清理队列中的残留旧数据,操作共享变量时加互斥锁避免多线程并发异常。修正后的代码如下:
from threading import Lock from queue import Queue class auto_claimer: def __init__(self) -> None: self.mutex = Lock() self.userQ = Queue() # 初始化加载数据抽成公共方法,避免重复代码 self.load_username_from_file() self.reloadQ() def load_username_from_file(self): """从磁盘文件加载最新的账号列表到内存""" with open("database.txt", "r") as f: self.username_list = [user.replace("\n", "") for user in f.readlines()] def reloadQ(self): # 加锁保护队列和账号列表的并发操作 with self.mutex: # 先清空队列旧数据 while not self.userQ.empty(): self.userQ.get() # 加载最新账号到队列 for i in self.username_list: self.userQ.put(i) def Queue(self): while True: if self.userQ.qsize() < len(self.username_list) / 2: self.reloadQ() def delete(self, item): # 先更新磁盘文件 with open("database.txt", "r") as f: lines = f.readlines() with open("database.txt", "w") as f: for line in lines: if line.strip("\n") != item: f.write(line) print("Successfully removed {} from the text file".format(item)) # 同步更新内存账号列表,并重载队列 self.load_username_from_file() self.reloadQ()
关键修改说明
- 抽离公共的文件加载方法
load_username_from_file,初始化和删除后都调用该方法,保证内存数据和磁盘文件一致 - 重载队列时先清空旧的残留数据,再加载最新的账号列表
- 所有操作共享变量(账号列表、队列)的逻辑都加互斥锁保护,避免多线程场景下的数据错乱
- 删除操作执行完文件写入后,立即触发内存数据更新和队列重载,实现数据实时生效
内容的提问来源于stack exchange,提问作者akemi
相关产品推荐
相关产品推荐

