You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:47:18