Как мне хранить эфемерные данные в классе функций? - PullRequest
2 голосов
/ 22 апреля 2019

Мне нужно сделать очередь сообщений.Я получаю сообщение, запускаю преобразования и отправляю его в очередь вывода.

import queue
import json
import re

Class example:
    def __init__(self):
        self.outputZero  = queue.Queue()
        self.outputOne   = queue.Queue()

   def transform(self, msg):
        messageDict = json.loads(msg)
        keys = [i for i in messageDict.keys()]

        for i in keys:             
            # reverse strings that include "bonkers
            if re.search("bonkers", str(messageDict[i])):
                messageDict[i] = messageDict[i][::-1]

        return messageDict

    def dispatch(self, msg):
        if "_special" in keys:
            self.outputZero.put(messageDict)
        elif "hash" in keys:
            self.outputOne.put(messageDict)

    def enqueue(self, msg):
       #transform the message
       cleanmsg = self.transform(msg)
       #dispatch the message
       self.dispatch(cleanmsg)

Проблема в том, что мне нужно иметь дело с последовательностями.Мне нужно иметь возможность обрабатывать сообщения, которые состоят из двух частей: _sequence, который является идентификатором последовательности, и _part, который является номером сообщения в последовательности, начиная с нуля.

Мне нужно использовать первое сообщение в последовательности, чтобы определить очередь для всех остальных, а затем отправить их в правильном порядке в любую очередь, определенную на основе первого сообщения.

Это пример нескольких сообщений.

input00 = '{"thefield": "themessage", "_privatefield" : "content", "_sequence" : "aeiou", "_part":"3"}' 
input01 = '{"thefield": "onemore", "_privatefield" : "content", "_sequence" : "aeiou", "_part":"1"}'
input02 = '{"thefield": "yetanother", "_privatefield" : "content", "_sequence" : "aeiou", "_part":"2"}' 
input03 = '{"thefield": "lastone", "_privatefield" : "content", "_sequence" : "aeiou", "_part":"0"}'

Мое решение состоит в том, чтобы сохранить словарь, который имеет каждый идентификатор последовательности и включена ли часть 0, а также текущий словарь, который находится «на очереди».Примерно так.

sequenceDict[input["_sequence"]]["_part"] = input00

Затем я могу включить оператор if, который срабатывает, когда 0-й _part включен для последовательности, и другой, который отправляет каждую серию деталей в правильном порядке.

Извините, это было долго.У меня вопрос: как я могу хранить такой словарь в своем классе example, чтобы он не был эфемерным и не исчезал при запуске новой команды?

...