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

Python多进程共用同一基础目录的解决方案问询

解决Python并行进程操作同名文件夹的冲突问题

核心思路

给每个并行进程分配独立的临时工作目录,将基础目录的内容复制到这个临时目录中,让进程在自己的临时目录内操作那个固定名称的文件夹——这样每个进程的"同名文件夹"实际处于不同的父目录下,完全隔离,不会产生资源冲突。进程完成后,临时目录会自动销毁,无需手动清理。

实现代码

from multiprocessing import Process
import os
import shutil
from tempfile import TemporaryDirectory
from time import sleep

def data_processing(base_dir, target_folder):
    # 创建自动清理的临时目录,退出with块时自动删除
    with TemporaryDirectory() as temp_work_dir:
        # 复制基础目录的内容到临时工作目录(如果基础目录有初始文件/子目录的话)
        if os.path.isdir(base_dir):
            shutil.copytree(base_dir, temp_work_dir, dirs_exist_ok=True)
        
        # 拼接临时目录下的目标文件夹路径
        target_path = os.path.join(temp_work_dir, target_folder)
        os.mkdir(target_path)
        print(f"进程[{os.getpid()}] 创建目录: {target_path}")
        
        sleep(5)  # 替换为你的实际数据处理逻辑
        
        os.rmtree(target_path)
        print(f"进程[{os.getpid()}] 删除目录: {target_path}")

def main():
    # 你的基础目录(存放需要复用的初始资源)
    BASE_DIR = "./my_base_dir"
    # 固定不能修改的目标文件夹名称
    FIXED_FOLDER_NAME = "a"
    
    # 创建基础目录(示例用,实际根据你的情况调整)
    os.makedirs(BASE_DIR, exist_ok=True)
    
    # 启动多个并行进程
    processes = []
    for _ in range(2):
        proc = Process(target=data_processing, args=(BASE_DIR, FIXED_FOLDER_NAME))
        processes.append(proc)
        proc.start()
    
    # 等待所有进程执行完毕
    for proc in processes:
        proc.join()

if __name__ == '__main__':
    main()

关键细节

  • TemporaryDirectory是Python标准库提供的安全临时目录工具,上下文管理器模式会自动处理目录的销毁,避免残留文件
  • 如果你的基础目录是空的,不需要复制内容,可以直接跳过shutil.copytree步骤,直接在临时目录中创建目标文件夹
  • shutil.copytree的dirs_exist_ok=True参数允许目标目录已存在时完成复制,适配重复执行的场景
  • 每个进程的操作完全在独立的临时目录内进行,彻底避免了同一路径的资源竞争

内容的提问来源于stack exchange,提问作者benr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:23:16