0

我想让一个 python 类永久存在,这样我就可以不断地与它交互。原因是这个类是高度内存密集型的,这意味着(1)我不能将它多次放入内存,以及(2)加载类非常慢。

我曾尝试使用PyroRPYC来实现这一点,但似乎这些包总是在每次发出新请求时删除对象并创建一个新对象(这正是我不想做的。)但是,我确实为 Pyro 找到了以下选项:

@Pyro4.behavior(instance_mode="single")

这确保只创建一个实例。但是,由于可能会同时发出多个请求,所以我不是 100% 认为这样做是安全的。有没有更好的方法来完成我想做的事情?

提前感谢您的帮助,非常感谢!(我已经为此苦苦挣扎了一段时间)。

大号

4

1 回答 1

1

如果你不想让你的类线程安全,你可以设置SERVERTYPE"multiplex",这将使所有远程方法调用都按顺序处理。

https://pythonhosted.org/Pyro4/servercode.html#server-types-and-concurrency-model

多路复用服务器(服务器类型“multiplex”)

此服务器使用连接多路复用器按顺序处理所有远程方法调用。此服务器中未使用任何线程。它使用您平台上可用的最佳支持选择器(kqueue、poll、select)。这意味着一次只运行一个方法调用,因此如果需要一段时间才能完成,所有其他调用都在等待轮到它们(即使它们来自不同的代理)。用于注册类的实例模式不会改变对实例的并发访问方式:在所有情况下,始终只有一个调用处于活动状态。你的对象永远不会被不同的线程同时调用,因为没有线程。它仍然会影响 Pyro 创建类实例的时间和频率。

于 2016-11-09T00:24:35.550 回答