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

1 投票
2 回答
984 浏览
提问于 2025-04-15 18:01

我有一个多线程的xmlrpc服务,它在内存中存储了大约2G的数据。目前,如果我想更新服务器提供的方法,就必须重启服务。问题是,重启服务后,它需要通过数据库或存储的数据重新加载之前在内存中的所有数据。

我使用的方法是这样的:

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

我希望能把这些方法当作一个代理,指向另一个模块,这样我的方法看起来就像这样:

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

这样我就可以在开发服务器上更新代码,然后简单地把更新后的代理模块复制到生产服务器上,而不需要重启服务。

我尝试在我的xmlrpc服务控制器的构造函数中添加 import service_proxy,但我觉得这个模块被缓存了,无法重新加载。

有没有好的方法可以做到这一点?谢谢。

2 个回答

1

如果重新加载不管用,你可以试试 twisted.python.rebuild;你的应用程序不一定要用Twisted写,才能使用这个工具。

我最近还看到一个叫 livecoding 的东西(“一个用于Python的代码重新加载库”),但它提到的是一个自定义模块系统,我对那部分不太明白。

4

你可以使用 reload 这个方法。你需要写一些代码来检查模块文件的最后修改时间。

撰写回答