我希望永久保持一个python类,以便我可以不断地与它进行交互。原因是这个类是高度内存密集型的,这意味着(1)我不能多次将它放入内存中,并且(2)加载类非常慢。
我尝试使用Pyro和RPYC来实现这一点,但似乎这些包总是删除对象并在每次发出新请求时创建一个新对象(这正是我的意思)不想这样做。)但是,我确实为Pyro找到了以下选项:
@ Pyro4.behavior(instance_mode = “单”)
确保只创建一个实例。但是,由于可能会同时发出多个请求,因此我不是100%这样做是安全的。有没有更好的方法来完成我想要做的事情?
在此先感谢您的帮助,非常感谢! (我已经在这方面努力了很长一段时间了)。
→
答案 0 :(得分:1)
如果您不想让您的课程线程安全,可以将SERVERTYPE
设置为"multiplex"
,这样就可以顺序处理所有远程方法调用。
https://pythonhosted.org/Pyro4/servercode.html#server-types-and-concurrency-model:
多路复用服务器(servertype" multiplex")
此服务器使用连接多路复用器按顺序处理所有远程方法调用。此服务器中未使用任何线程。它使用您平台上可用的最佳支持选择器(kqueue,poll,select)。这意味着一次只运行一个方法调用,因此如果需要一段时间才能完成,则所有其他调用都在等待轮到他们(即使他们来自不同的代理)。用于注册类的实例模式不会改变对实例的并发访问的方式:在所有情况下,始终只有一个调用处于活动状态。永远不会从不同的线程同时调用您的对象,因为没有线程。它仍然会影响Pyro创建类实例的时间和频率。