2017-03-02 63 views
-1

多線程我已經在多線程的代碼,如果不存在錯誤時的mkdir Python中

if not os.path.exists(folder): os.makedirs(folder) 

我有錯誤這樣

The folder cannot be created since a file already exists with the same path 

我不知道我能做些什麼來創建文件夾對於這個錯誤,你有什麼想法嗎?

+0

你有多個線程試圖創建相同的文件夾?問題是線程1可能會在線程2檢查它是否存在並嘗試創建它之間創建文件夾。 – Barmar

+0

您需要在線程之間實現互斥,以便測試和創建以原子方式執行。 – Barmar

+0

如果我使用Mutual,恐怕表現不佳。實際上,我首先在主線程中檢查並創建文件夾,但是如果沒有任何圖像下載,我不想創建文件夾,以便在保存線程之前將該函數移動到任何位置,是否有任何方法不影響性能和做我需要的東西? – mikezang

回答

2

閱讀the docs。如果你不在乎的目錄是否已經存在,只是它當你做,只要致電:

os.makedirs(folder, exist_ok=True) 

甚至不檢查該目錄是否存在與exists(受競爭條件),只需撥打os.makedirsexist_ok=True,它會創建它,如果它不存在,如果它已經存在,什麼也不做。

這需要Python 3.2或更高版本,但如果你是在較早的Python,可以達到同樣的沉默忽略與異常處理:

import errno 

try: 
    os.makedirs(folder) 
except OSError as e: 
    if e.errno != errno.EEXIST: 
     raise # Reraise if failed for reasons other than existing already 
+0

太棒了!這是我需要的! – mikezang