У меня есть функция, myfunc
, которая вызывается в параллельной обработке. Когда я делаю несколько процессов совместно одной и той же папкой назначения, все они вызывают myfunc
параллельно и проверяют наличие папки назначения. Если он уже существует, проблем нет. Однако, если папка не существовала до запуска сценария, тогда первый процесс войдет в блок if и создаст папку. С другой стороны, будет еще один процесс, который будет вводить то же самое, если блок «почти» в одно и то же время, обнаружит, что папка не существует, и попытается создать ее, в то время как первый процесс фактически создает ее или уже сделал это. Поэтому в какой-то момент будет 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
Хорошо, поймайте исключение? – BlackBear