【发布时间】:2016-08-06 07:42:35
【问题描述】:
我有一个函数myfunc,它在并行处理中被调用。当我让多个进程共享同一个目标文件夹时,它们都并行调用myfunc 并检查目标文件夹的存在。如果它已经存在,没有问题。但是,如果在启动脚本之前该文件夹不存在,那么第一个进程将进入 if 块并创建该文件夹。另一方面,将有另一个进程会同时进入相同的 if block "almost",会发现该文件夹不存在,并会尝试创建它,而第一个进程实际上正在创建它或已经做到了。所以在某个时候会有一个OSError 告诉文件夹已经存在。
在多处理时有没有一种干净的方法来处理这个问题?在启动我的进程之前,我正在考虑将目标文件夹从功能 myfunc 中处理出来。但是,为了知识,找到使用多处理的解决方案会很好。
import os, sys
def myfunc(file_names, destination=None, file_permission=None, verbose=False):
absPath = os.path.abspath(file_names[0])
baseName = os.path.basename(absPath)
dirName = os.path.dirname(absPath)
destination_folder = "/default/destination" if destination is None \
else os.path.abspath(destination)
if not os.path.isdir(destination_folder):
os.mkdir(destination_folder)
os.chmod(destination_folder, file_permission)
if verbose:
print "Created directory", destination_folder
【问题讨论】:
-
那么,捕捉到异常了吗?
标签: python multiprocessing file-exists