私は並列処理で呼び出される関数myfunc
を持っています。複数のプロセスで同じ宛先フォルダを共有すると、すべてがmyfunc
と並行して呼び出され、宛先フォルダの存在が確認されます。すでに存在していれば問題ありません。しかし、スクリプトを起動する前にフォルダが存在しなかった場合、最初のプロセスはifブロックを入力してフォルダを作成します。一方、ブロックが「ほとんど」同時にブロックすると、同じプロセスに入り、フォルダが存在しないことがわかり、プロセスを作成しようとしますが、最初のプロセスでは実際にプロセスが作成されます。すでにそれを行っています。したがって、ある時点で、フォルダがすでに存在していることを示すOSError
があります。マルチプロセッシング中のファイルの存在を正しく確認しています
マルチプロセッシング中にこの問題に対処する明確な方法はありますか?私はプロセスを起動する前に、機能myfunc
の外に目的地のフォルダを世話することを考えています。しかし、知識のために、マルチプロセッシングを使って解決策を見つけるのは良いことです。同時実行の問題を解決するためのthreading
モジュールから
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