日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux递归创建文件夹_Python中并发请求创建文件夹带来的线程安全问题

發布時間:2024/1/23 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux递归创建文件夹_Python中并发请求创建文件夹带来的线程安全问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們日常寫程序的過程中,免不了與文件系統打交道,各種開發語言都提供了與文件系統交互的指令函數,比如Python中的os模塊,就提供了許多這樣的指令函數,今天就以創建文件夾為例,來說一下,如果用的不當,會帶來的線程安全問題。

在Python的os模塊中,創建文件夾有兩種方式,一個是os.mkdir(),另外一個是os.makedirs(),這兩個的區別如下:

os.mkdir() 函數:os.mkdir(path, mode=0o777)

使用模式mode創建名為path的目錄。如果目錄已經存在,則拋出異常FileExistsError。

在一些系統中,可以忽略mode,在一些平臺可以通過調用chmod()來指定它們。mode就是所創建目錄對應的文件及文件夾的讀寫權限,可以參考Linux命令下的chmod命令來理解。

os.makedirs()函數:os.makedirs(path, mode=0o777, exist_ok=False)

遞歸目錄創建函數,和mkdir()很像,但是所有中間級目錄都要包含葉目錄。

遞歸創建目錄,題中應有之意即路徑中哪一層不存在,則自動創建。

區別于os.mkdir(path, mode=0o777),只創建最后一層的目錄。

path:所要創建的目錄

參數mode傳遞給mkdir();

如果exist_ok是False(默認),當目標目錄(即要創建的目錄)已經存在,會拋出一個OSError。

具體使用實例如下:

在上圖/data/zzz文件夾下沒有任何文件夾,我們現在就來創建一個名為a的文件夾:

這時a文件夾已經存在,我們再執行一下上次的指令函數:

這時就會報錯,如果程序中沒有處理異常,或者異常之后沒有做補償措施,那么會對業務系統中的某個方面會有一些影響,雖然影響不是很大,但是我們完全可以通過編程語言提供的其他函數,進行系統完善,下面就用os.makdirs(),來避免上面的錯誤:

從上圖中可以看出,如果os.makedirs()使用參數exist_ok的默認值,也就是exist_ok=False,還是會報[Errno 17] File exists的錯誤,這時就要用exist_ok=True,這樣如果文件夾存在,會忽略創建文件夾。也有人會用os.mkdir()這樣寫程序,就是加一個判斷,如果文件夾存在,才去用os.mkdir()去創建文件夾,如果這個方法沒有加鎖,那么就會帶來線程安全問題,就是兩個或者多個線程同時進入創建文件夾的只指令處,也會發生拋出異常的現象,如果加鎖了,也會對該方法性能方面有些影響,況且鎖使用不好,容易把自己都給鎖死,所以還是使用編程語言提供的函數去正確的編程。這兩個還有一個區別就是是否支持遞歸創建文件夾:

可見os.mkdir()不支持遞歸創建文件夾,只有父層文件夾存在時,才能創建子層文件夾,而os.makedirs()是支持遞歸創建文件夾的。

總結

以上是生活随笔為你收集整理的linux递归创建文件夹_Python中并发请求创建文件夹带来的线程安全问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。