Python:在XMLRPC服务器中重新加载类的最佳方法

时间:2010-01-14 14:56:01

标签: python xml-rpc

我运行了一个多线程xmlrpc服务,它在内存中存储了大量的数据〜2G。目前,如果我想更新服务器公开的方法,我必须重新启动该服务。这里的问题是,如果我重新启动服务,它需要使用数据库或使用搁置数据将内存中的所有数据加载到内存中。

我正在使用这样的方法:

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

我希望我能做的就是使用这些方法作为另一个模块的代理,所以我的方法看起来更像是

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

这样我可以更新开发服务器上的代码,然后只需将我的更新代理模块复制到生产服务器,而无需重启。

我尝试添加 import service_proxy 到我的xmlrpc服务控制器的构造函数,但我认为该模块已缓存,不会重新加载。

这样做有好办法吗?感谢。

2 个答案:

答案 0 :(得分:4)

您可以使用reload方法。您需要编写一些代码来检查模块文件的上次修改时间。

答案 1 :(得分:1)

如果重新加载不起作用,您可以尝试twisted.python.rebuild;你的应用程序不需要用Twisted编写来使用这个twisted.python实用程序。

我最近也看到了这个livecoding的东西(“Python的代码重装库”),但它谈到了一个自定义模块系统,我不知道那里发生了什么。