2010-01-14 70 views
1

我有一個多線程xmlrpc服務正在運行,它在內存中存儲了大量的數據〜2G。目前,如果我想更新服務器公開的方法,我必須重新啓動服務。這裏的問題是,如果我重新啓動服務,它需要通過使用數據庫或使用擱置的數據將內存中的所有數據加載回內存。Python:在XMLRPC服務器中重載類的最佳方法

我使用這樣的方法:

xmlrpc_getUser(self, uid): 
    return self.users[uid] 

我希望我可以做的僅僅是使用這些方法作爲代理到另一個模塊,所以我的方法看起來更像是這個

xmlrpc_getUser(self, uid): 
    return self.proxy.getUser(uid) 

這樣我就可以更新開發服務器上的代碼,然後只需將我的更新代理模塊複製到生產服務器,而無需重新啓動。

我嘗試將 import service_proxy 添加到我的xmlrpc服務控制器的構造函數中,但我認爲該模塊已被緩存且不會重新加載。

有沒有很好的方法來做到這一點?謝謝。

回答

4

您可以使用reload方法。您需要編寫一些代碼來檢查模塊文件的最後修改時間。

+0

請注意,['reload'函數](https://docs.python.org/3/library/importlib.html#importlib.reload)已經在Python 3中移動了。 – 2017-08-07 21:10:16

1

如果重新加載不起作用,您可以嘗試twisted.python.rebuild;你的應用程序不需要寫成Twisted來使用這個twisted.python工具。

我最近也看到了這個livecoding這個東西(「Python的代碼重裝庫」),但它談到了一個自定義模塊系統,我不知道那裏發生了什麼。