Мне нужно сделать очередь сообщений.Я получаю сообщение, запускаю преобразования и отправляю его в очередь вывода.
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
, чтобы он не был эфемерным и не исчезал при запуске новой команды?