有没有办法mkdir -p在Python中获得类似于shell的功能.我正在寻找除系统调用之外的解决方案.我确信代码少于20行,我想知道是否有人写过它?
shell脚本的修改版本将音频文件从FLAC转换为MP3格式.该计算机具有四核CPU.该脚本使用以下命令运行:
./flac2mp3.sh $(find flac -type f)
Run Code Online (Sandbox Code Playgroud)
这会将flac目录中的FLAC文件(文件名中没有空格)转换为mp3目录中的MP3文件(与文件名相同flac).如果目标MP3文件已存在,则脚本将跳过该文件.
问题是,有时两个脚本实例几乎同时检查是否存在相同的MP3文件,导致MP3文件损坏.
如何多次运行脚本(即每个核心一次),而不必在每个命令行上指定不同的文件集,而不覆盖工作?
更新 - 最小竞争条件
该脚本使用以下锁定机制:
# Convert FLAC to MP3 using tags from flac file.
#
if [ ! -e $FLAC.lock ]; then
touch $FLAC.lock
flac -dc "$FLAC" | lame${lame_opts} \
--tt "$TITLE" \
--tn "$TRACKNUMBER" \
--tg "$GENRE" \
--ty "$DATE" \
--ta "$ARTIST" \
--tl "$ALBUM" \
--add-id3v2 \
- "$MP3"
rm $FLAC.lock
fi;
Run Code Online (Sandbox Code Playgroud)
然而,这仍然留下了竞争条件.
请考虑以下代码:
def readPath(path):
content = None
if os.path.isfile(path):
f = open(path,"rb")
content = f.read()
f.close()
return content
Run Code Online (Sandbox Code Playgroud)
与这一个:
def readPath(path):
content = None
try:
f = open(path,"rb")
content = f.read()
f.close()
except:
pass
return content
Run Code Online (Sandbox Code Playgroud)
鉴于def被连续调用多次(数百到数千次),主要是使用有效路径(代表文件系统上的实际文件),但有时使用不存在的路径,哪个版本更有效?在打开文件之前检查条件是否比设置try块慢?