2011-11-28 57 views
1

我們有一個重要的〜(50kloc)包/模塊樹(約2200文件),我們隨每個作業一起運送到集羣。作業運行約12小時,因此解壓/引導(即爲每個模塊解析PYTHONPATH)的開銷通常不是什麼大問題。但是,隨着我們工作節點中的核心數量增加,我們越來越多地遇到了調度程序將同時存在12個作業的情況,這將磨碎可能的暫存驅動器以停止服務所有請求(更糟的是,由於原因超出我們的控制,每個作業都需要一個單獨的環迴文件系統,因此驅動器上有兩層間接路徑)。是否可以預編譯整個python包?

有沒有辦法向解釋器提示每個文件的正確位置(沒有使用遍佈遍歷的路徑(可能覆蓋導入?)來修飾代碼),或將所有關聯的.pyc文件打包成某種二進制blob那可以只讀一次?

謝謝!

回答

3

我們在集羣上遇到了類似這樣的問題。 (Lustre文件系統的元數據操作速度很慢。)我們的解決方案是使用Python中的「zip import」工具。

在我們的例子中,我們做了一個stdlib的壓縮文件(放置在sys.path中,如「/usr/lib/python26.zip」)和我們項目的另一個壓縮文件,後者添加了後者到PYTHONPATH。

這要快得多,因爲它是單個文件系統元數據讀取,然後是快速讀取目錄的zip文件以找出內部內容,並緩存以備查找。

+0

正是我所需要的,我只是無法谷歌找到它正確的詞。謝謝! – PerilousApricot

相關問題