Windows下多实例Python脚本如何安全写入同一文件?
Windows 10下Python多实例文件写入的独占锁实现
针对你需要多实例脚本安全写入file.txt的需求,直接基于Windows原生文件锁机制实现,无需修改原有任务处理逻辑,仅需替换文件写入部分为带锁操作:
核心实现代码
使用Python标准库msvcrt(Windows专属)实现非阻塞式独占锁,锁被占用时自动等待重试:
import msvcrt import time def write_with_lock(file_path, content): while True: try: # 以写入模式打开文件 with open(file_path, 'w', encoding='utf-8') as f: # 尝试获取文件开头1字节的独占锁(非阻塞) msvcrt.locking(f.fileno(), msvcrt.LK_NBLCK, 1) # 写入内容 f.write(content) # 释放锁 msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK, 1) # 成功写入后退出循环 break except IOError: # 锁被占用,等待0.1秒后重试 time.sleep(0.1)
原有脚本改造
只需要将你原有代码中写入file.txt的部分替换为上述函数即可,比如原有代码可能是:
# 原有写入逻辑(替换前) completed_tasks.append(processed_task) with open('file.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(completed_tasks))
替换为:
# 替换为带锁写入 completed_tasks.append(processed_task) write_with_lock('file.txt', '\n'.join(completed_tasks))
关键说明
- 锁机制:
msvcrt.LK_NBLCK是Windows的非阻塞独占锁,确保同一时间只有一个实例能写入文件;如果锁被占用,会抛出IOError,此时脚本自动等待后重试,不会直接失败。 - 自动释放:只要文件句柄被关闭(
with语句会自动处理),Windows会自动释放锁,即使脚本意外崩溃也不会遗留死锁。 - 无额外依赖:完全使用Python标准库,不需要安装第三方包,适配Python 3.10及以上版本。
内容的提问来源于stack exchange,提问作者MyNameHere
相关产品推荐
相关产品推荐

