Skip to main content
 首页 » 编程设计

python之维护与 zerorpc 的 session

2025年05月04日6youxin

如何使用我的 zerorpc 维护不同的 session 或本地状态服务器?

例如(下图),如果我有多个客户端,后续客户端将覆盖模型状态。我考虑过每个客户端都有一个 ID,RPC 逻辑将尝试以这种方式分离变量,但 tbis 看起来很乱,一旦客户端断开连接,我将如何清除旧状态/变量?

服务器

import zerorpc 
import FileLoader 
 
class MyRPC(object): 
    def load(self, myFile): 
        self.model = FileLoader.load(myFile) 
    def getModelName(self): 
        return self.model.name 
 
s = zerorpc.Server(MyRPC()) 
s.bind("tcp://0.0.0.0:4242") 
s.run() 

客户端 1

import zerorpc 
 
c = zerorpc.Client() 
c.connect("tcp://127.0.0.1:4242") 
c.load("file1") 
print c.getModelName() 

客户端 2

import zerorpc 
 
c = zerorpc.Client() 
c.connect("tcp://127.0.0.1:4242") 
c.load("file2") # AAAHH! The previously loaded model gets overwritten here!  
print c.getModelName() 

请您参考如下方法:

不确定 session ...但是如果您想取回不同的模型?也许您可以只使用一次函数来实例化一个新的 Model()?

import zerorpc 
import FileLoader 
 
models_dict ={}  # Keep track of our models 
 
def get_model(file): 
    if file in models_dict: 
        return models_dict[file] 
    models_dict[file] = MyModel(file) 
    return model 
 
class MyModel(object): 
 
    def __init__(self, file): 
        if file: 
            self.load(file) 
 
    def load(self, myFile): 
        self.model = FileLoader.load(myFile) 
 
    def getModelName(self): 
        return self.model.name 
 
s = zerorpc.Server(<mypackagename.mymodulename>)  # Supply the name of current package/module 
s.bind("tcp://0.0.0.0:4242") 
s.run() 

客户:

import zerorpc 
 
c = zerorpc.Client() 
c.connect("tcp://127.0.0.1:4242") 
print c.get_model("file1")