我有一個函數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