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

Python多进程开发时WinError文件被占用报错如何解决

报错根因

你遇到的文件占用报错核心有两个原因:

  • 代码中存在无意义的同名文件重命名操作:你在process_mp函数的末尾,对空文件和最新文件执行os.rename时,拼接出来的目标路径dst_path_2/dst_path_3和原始文件路径file完全一致,相当于尝试把文件移动到它本身的路径,Windows系统不允许这类操作,会直接抛出文件被占用的错误。
  • 全局配置代码位置错误:Windows下Python多进程默认使用spawn模式,每个子进程启动时都会重新导入整个主模块,你写在全局作用域的config.read、source/archive初始化逻辑会被每个子进程重复执行,虽然不是本次报错的直接原因,但会埋下状态不一致的隐患。

修复方案

  1. 删除无意义的同名重命名逻辑,直接移除以下两段代码即可:
for file in all_file_paths:
    if os.path.getctime(file) > time.time() - 120:
        continue 
    if os.path.getsize(file) == 0:
        dst_root = source
        dst_path_2 = os.path.join(dst_root, mp, os.path.basename(file))
        os.rename(file, dst_path_2)

以及

if file == newest_file_paths :
    dst_root = source
    dst_path_3 = os.path.join(dst_root, mp, os.path.basename(file))
    os.rename(file, dst_path_3)

如果确实需要对这两类文件做移动操作,请修改目标路径为和原路径不同的地址。

  1. 将全局配置逻辑移到main函数内部,通过参数传递给子进程处理函数,避免全局状态重复初始化:
  • 把config初始化、source/archive读取的代码挪到main函数开头
  • 修改process_mp函数接收source、archive两个参数
  • 调用pool.imap_unordered时用偏函数或者迭代器拼接参数传入
  1. 修复逻辑bug:你判断red_zone的所有语句都错误使用了等于判断符==,应该改为赋值符=,否则red_zone永远等于初始值1,阈值判断逻辑完全不生效。

内容的提问来源于stack exchange,提问作者Mediterráneo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:03