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
相关产品推荐
相关产品推荐

