2013-06-26 19 views
2

給定一個大的(4.5 GB代碼庫)python測試框架,其執行涉及數十個文件,其中許多文件不能直接被pickle-able,是否可以將程序的初始執行封裝在單行函數中,創建一個Stackless圍繞該函數的tasklet,並且在執行期間,pickle tasklet作爲保存整個程序狀態的一種方式? Stackless'tasklet酸洗能力的限制是什麼?使用Stackless Python來保存大型運行程序的狀態?

回答

2

這確實是由Stackless Pickling

一個無堆棧的主要特點提供了一個可能性是它的鹹菜能力和unpickle微進程。這意味着一個tasklet中的正在運行的程序可以持久地存儲到一個文件或字符串中。之後,它可以再次恢復,並可以繼續運行在先前暫停的位置。這不需要在同一臺機器上!:

所以對於我們的問題「有可能」的答案是「是」。

作爲「怎麼做」的問題,我認爲上面的鏈接提供了一個具體的例子。嘗試它併發布其他問題,如果它不起作用。鑑於你的代碼庫的大小(4.5GB的Python 文件是相當巨大!),也許你會達到Stackless的極限?

2

更具體地說: Stackless爲許多內置元素(如執行框架和模塊以及其他運行時對象)添加了酸洗支持。但是,代碼(如類,函數和模塊) 。這意味着在另一臺機器上,必須通過導入機制訪問相同的對象。
換句話說,pickled執行狀態將包含當前局部變量以及所有這些變量,但代碼對象或模塊的內容將不會被picled。這些狀態需要在狀態爲unpickled時按名稱訪問。