如何防止多python脚本覆盖相同的文件?
问题描述:
我使用多个Python脚本收集数据并将其写入一个单一的json数据文件。如何防止多python脚本覆盖相同的文件?
不可能组合脚本。
写入过程很快,经常发生错误(例如一些字符在最后重复),这是致命的,特别是因为我使用的是json格式。
如果有其他脚本正在尝试写入文件,是否有办法阻止python脚本写入文件? (这将是绝对OK,如果是,python脚本尝试写入到文件中的数据丢失,但该文件的语法不会被莫名其妙地“受伤”是很重要的。)
代码剪断:
这将打开该文件,并检索数据:
data = json.loads(open("data.json").read())
这追加一个新的字典:
data.append(new_dict)
而旧文件被覆盖:
open("data.json","w").write(json.dumps(data))
信息:data
是包含类型的字典列表。
操作系统:漏洞进程发生在Linux服务器上。
答
在Windows上,您可以尝试创建该文件,并在出现异常时解救出来(因为文件被另一个脚本锁定)。但在Linux上,你的方法肯定会失败。
相反,我会
- 写入每个新的字典一个文件,后面添加了进程的ID文件名和反
- 耗时的过程(ES),不读一个单一的文件,但排序的文件(根据修改时间)和因此,在每个脚本从它
构建数据:
filename = "data_{}_{}.json".format(os.getpid(),counter)
counter+=1
open(filename ,"w").write(json.dumps(new_dict))
,并在消费者(阅读排序文件中的每个字典在受保护的环):
files = sorted(glob.glob("*.json"),key=os.path.getmtime())
data = []
for f in files:
try:
with open(f) as fh:
data.append(json.load(fh))
except Exception:
# IO error, malformed json file: ignore
pass
答
我将发布自己的解决方案,因为它为我工作:
每一个Python脚本检查(前打开和写入数据文件)是否存在名为data_check
的文件。如果是这样的话,pyhthon脚本不会尝试读取和写入文件并关闭应该写入文件的数据。如果没有,python脚本创建文件data_check
,然后开始读取和保存文件。写入过程完成后,文件data_check
被删除。
这是一个系统相关的问题。在Windows本地驱动器上,写入时文件被锁定,因此不能并发写入。在Linux上,你可以并发写入。 –
如果你写了不同的文件,你会如何结合结果?最后一个胜利? –
@ Jean-FrançoisFabre一切都发生在一个linux服务器上 –