subprocess.call()和os.system()命令的執行速度是否有差異?假設該命令本身是完全相同的。
我知道外面有很多帖子在談論subprocess的好處,以及為什么os.system()應該被拋棄...但是沒有人提到關于它們的速度。據我所知,subprocess 遠遠不能作為 os.system() 的包裝,這意味著可能存在速度上的差異。
我希望得到一個有實驗資料的答案,而不是理論上的東西,因為我實際上需要它來評估一個有數百個此類呼叫的腳本的性能。
uj5u.com熱心網友回復:
os.system在Windows上比subprocess.call貴得多。事實上,os.system啟動了一個批處理解釋器,它將決議命令,然后通常在路徑中找到要運行的可執行檔案,然后啟動一個運行目標可執行檔案的新行程。同時,subprocess.call主要啟動目標可執行檔案。運行一個新的行程是最昂貴的操作之一,所以運行兩個行程會使操作變得更加緩慢。
Windows上的一個簡單的基準測驗證明了這一點(在一個空目錄上呼叫ls.exe):
os.system。 62.3 ms/call
subprocess.call。34.8 ms/call
在Linux/Mac/WSL上,啟動一個新行程的成本要小得多。因此,我們應該預期差距會更小,而實際情況就是如此。然而,結果有點令人驚訝,因為subprocess.call的速度有點慢。下面是在WSL2上的結果:
os.system: 3.0 ms/call
subprocess.call。3.8 ms/call
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309432.html
標籤:
上一篇:在C 中,哪種方法更快?是采取輸入、存盤在陣列中并同時進行加法,還是采取輸入并存盤為陣列,然后再進行加法?
下一篇:多個后續連接的Spark性能問題
