2012-07-23 48 views
0

我正在研究一個需要用戶輸入python代碼在我的服務器上執行的web服務(我們檢查代碼注入)。我不得不導入一個相當大的模塊,所以我想確保我沒有啓動python,並在每次運行時從頭開始導入模塊(大約需要4-6s)。用戶輸入Python腳本執行守護進程

爲此,我打算創建一個python(3.2)deamon,它將用戶輸入代碼作爲模塊導入,執行它,然後刪除/垃圾收集該模塊。我需要確保該模塊完全從RAM中消失,因爲此過程將持續到服務器重新啓動。我讀過一堆這樣的話,說這是python中很難做到的事情。

這樣做的最好方法是什麼?使用exec來定義一個帶有用戶輸入代碼的函數(用於變量範圍),然後執行該函數並以某種方式刪除該函數會更好嗎?或者有沒有更好的方法來完成我錯過的這個過程?

+0

爲每次運行啓動一個新的python解釋器似乎是最好的解決方案:爲什麼需要這麼久?我寧願檢查它爲什麼需要這麼長時間... – gecco 2012-07-23 11:38:13

+0

我們正在加載聖人,其中有一個巨大的附加庫需要提供給用戶。 – 2012-07-23 12:55:51

回答

0

你也許可以考慮創建一個python守護進程池

他們的目的是服務一個請求,然後死亡。

您將不得不編寫一個池管理器來確保始終有X守護程序進程等待傳入請求。 (X是等待守護進程的數量:取決於所需的工作負載)。池管理器必須觀察守護進程池,並在每次進程完成時啓動新實例。

+0

這會創建一個很大的開銷,從Python加上所有被加載到RAM的庫多次? – 2012-07-24 21:02:16

+0

取決於你的硬件當然......裝載所有附加庫的python的內存佔用量是多少? – gecco 2012-07-25 05:10:09

+0

我將不得不檢查,謝謝你的建議! – 2012-07-27 10:04:01