2010-01-14 52 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的代码重装库”),但它谈到了一个自定义模块系统,我不知道那里发生了什么。