Python 协议之间的数据分离
据 每次建立连接时都会创建一个新的协议实例,但我观察到两者之间存在某种数据共享 简单地说,我定义了一个类,每个协议都将使用它来表示状态Python 协议之间的数据分离,python,protocols,twisted,Python,Protocols,Twisted,据 每次建立连接时都会创建一个新的协议实例,但我观察到两者之间存在某种数据共享 简单地说,我定义了一个类,每个协议都将使用它来表示状态 class JSONCollector(): char_buffer = StringIO.StringIO() ... def process_data(self, data): ... self.char_buffer.write(char) 协议实例化了它 class JSO
class JSONCollector():
char_buffer = StringIO.StringIO()
...
def process_data(self, data):
...
self.char_buffer.write(char)
协议实例化了它
class JSONProtocol(protocol.Protocol):
def __init__(self):
self.json_collector = JSONCollector()
def dataReceived(self, data):
self.json_collector.process_data(data)
self.transport.write(str(self))
然而,当我向dataReceived添加以下语句时,每个连接似乎都获得了相同的JSONCollector实例
self.transport.write(str(self.json\u collector.char\u buffer))
self.transport.write(str(self))
我得到以下信息:
连接1:0x968ae2c处的StringIO.StringIO实例>
连接2:0x968ae2c处的StringIO.StringIO实例>
此外,每次我键入文本时,都会显示从其他连接键入的文本。
因此,似乎出于某种奇怪的原因,StringIO()实例被共享,我遗漏了什么。我想我可以使用工厂通过addr来分离缓冲区,并确保每个协议只使用自己的缓冲区,但如果不需要共享存储,我宁愿不要跳转
谢谢。这是:
class JSONCollector():
char_buffer = StringIO.StringIO()
似乎是个错误,也是你麻烦的根源。相反,请尝试以下方法:
class JSONCollector():
def __init__(self):
self.char_buffer = StringIO.StringIO()
否则,您将为整个类类型创建一个char\u缓冲区,而不是每个实例一个。这是:
class JSONCollector():
char_buffer = StringIO.StringIO()
似乎是个错误,也是你麻烦的根源。相反,请尝试以下方法:
class JSONCollector():
def __init__(self):
self.char_buffer = StringIO.StringIO()
否则,您将为整个类类型创建一个char\u buffer
,而不是为每个实例创建一个