Первое, что делает мой скрипт на python, это создает выходной каталог:
def create_output_directory():
# creating output folder and link to latest
output_folder = 'output_%s' % datetime.now().strftime('%Y%m%d')
if os.path.exists(output_folder):
logger.warning('previous directory %s exists, file will be overwritten' % output_folder)
else:
os.mkdir(output_folder)
if os.path.exists('output_latest'):
os.remove('output_latest')
os.symlink(output_folder, 'output_latest')
return output_folder
, чтобы вы получили пустой каталог output_20190319
и символическую ссылку output_latest
на него.
Я хочу параллельно запускать разные экземпляры моего скрипта Python с разными аргументами.В сценарии оболочки:
python myscript.py arg1 &
sleep 1
python myscript.py arg2 &
sleep 1
python myscript.py arg3 &
обычно это работает без проблем, но иногда я получаю:
File "myscript.py", line 16, in create_output_directory
os.mkdir(output_folder)
OSError: [Errno 17] File exists: 'output_20190319'
Я не уверен, что понимаю.Разве не достаточно 1 секунды, чтобы создать каталог и избежать условий гонки?Есть ли лучшее решение?Блокировка файла?