簡體   English   中英

協議之間扭曲的python數據分離

[英]twisted python separation of data between protocols

根據扭曲的文檔,每次建立連接時都會創建一個新的Protocol實例,但是我觀察到兩者之間存在某種數據共享。

簡要地說,我已經定義了一個類,每個協議都將使用該類來表示狀態

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 self.transport.write(str(self.json_collector.char_buffer))self.transport.write(str(self))時,每個連接似乎都獲得了JSONCollector的相同實例。

我得到以下內容:

連接1:位於0x968ae2c的StringIO.StringIO實例> <位於0x969036c的main .JSONProtocol實例>

連接2:位於0x968ae2c的StringIO.StringIO實例> <位於0x969068c的main .JSONProtocol實例>

同樣,每次我輸入文本時,也會顯示從其他連接輸入的文本。 因此,似乎出於某種奇怪的原因,共享了StringIO()實例,我是否錯過了某些東西。 我想我可以使用工廠通過addr分隔緩沖區,並確保每個協議都僅使用其自己的緩沖區,但是在不需要共享存儲的情況下,我寧願不跳圈

謝謝。

這個:

class JSONCollector():
    char_buffer = StringIO.StringIO()

似乎是錯誤,是您麻煩的根源。 相反,請嘗試以下操作:

class JSONCollector():
    def __init__(self):
        self.char_buffer = StringIO.StringIO()

否則,您將為整個類類型創建一個char_buffer ,而不是每個實例一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM