Skip to content

scripts/file_lock.py 在 Windows 上不可用(依赖 fcntl 模块) #180

@GoodBoy119

Description

@GoodBoy119

问题描述

scripts/file_lock.py 当前使用 fcntl 模块实现文件锁,但该模块仅在 Unix/Linux/macOS 系统上可用,在 Windows 环境中不存在。

因此在 Windows 上运行项目时会直接报错,导致相关功能无法使用。


运行环境

  • 操作系统:Windows 10 / Windows 11
  • Python 版本:3.x
  • 项目版本:main 分支(最新)

复现步骤

  1. 克隆仓库
  2. 执行涉及 scripts/file_lock.py 的功能
  3. 出现如下错误:
ModuleNotFoundError: No module named 'fcntl'


## 期望行为

文件锁机制应支持跨平台 Windows 环境中也可以正常运行---

## 实际行为

 Windows 上导入 `fcntl` 失败程序直接崩溃---

## 建议解决方案

### 方案一:增加平台兼容处理(推荐最小改动)

根据操作系统选择不同实现```python
import os

if os.name == "nt":
    import msvcrt
else:
    import fcntl

然后封装统一的加锁/解锁接口:

  • Linux/macOS:使用 fcntl.flock
  • Windows:使用 msvcrt.locking

方案二(推荐):使用跨平台库

引入成熟的跨平台文件锁库,例如:

示例:

import portalocker

with portalocker.Lock(lock_file, timeout=10):
    # 临界区逻辑

优点:

  • 天然支持 Windows / Linux / macOS
  • 实现简单
  • 稳定性更好

补充说明

  • 当前代码已经通过 .lock 文件实现锁文件机制,迁移成本较低
  • 使用的 os.replace 在 Windows 上是兼容的,因此只需修改锁实现即可

影响范围

该问题会影响所有 Windows 用户,导致相关功能无法使用。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions