Поток Redis на Python ожидает получения сообщения

#python #python-3.x #redis

#python #python-3.x #redis

Вопрос:

в настоящее время работает над проектом с участием Python Flask и Redis. Я хотел бы использовать потоки Redis для получения пользовательского ввода и отправки их на серверный микросервис для обработки. Затем результаты будут возвращены через stream обратно в приложение flask для отображения.

Похоже, что для Python существует три модуля, совместимых с redis. Redis-Py , ReJSON , и Walrus . Из трех Walrus имеет лучшую документацию, но не поддерживает JSON и поддерживает ReJSON JSON, но не поддерживает потоки.

В настоящее время база данных Redis запущена в docker с включенным модулем RedisJSON.

flaskapp.py

 from walrus import *
from flask import Flask, request
from flask_restful import Resource, Api, reqparse

app = Flask(__name__)
api = Api(app)

db = Walrus(host=`redis-api`, port=6379, password='testpassword', db=0)

stream = db.Stream('stream-one')


class siteAPI_GP(Resource):

    # Returns existing Queries
    def get(self):
        queries = db.get('queryDB').decode('utf-8')

        return {'message': 'Success', 'data': queries}, 200

    # Adds new Query
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('identifier', required=True)
        parser.add_argument('query', required=True)

        args = parser.parse_args()

        # Here I would like to add the variable args to stream-one
        msgid1 = stream.add({'message': args})

        return {'message': 'Query Recieved', 'data': args}, 201    

# Create routes
api.add_resource(siteAPI_GP, "/query")
 

backend.py

    from walrus import *

redis_host = "redis-api"
redis_port = 6379
redis_password = "Password:)"

# Connet to DB
db = Walrus(host=redis_host, port=redis_port, password=redis_password, db=0)

# Connect to Stream
stream = db.Stream('stream-one')
 

Вот некоторый псевдокод для того, что я хотел бы сделать backend.py после того, как скрипт подключится к потоку. Каков наилучший способ сделать это?

     for message-received in stream-one:
    execute some code
else 
    print "still waiting for message"
 

В настоящее время я подумываю об использовании Walrus модулей во всех скриптах Python, за исключением flaskapp.py случаев, когда я буду использовать оба ReJSON и Walrus предоставлять как потоки, так и функциональность json.

Вся помощь очень ценится!

Комментарии:

1. Возможно, комбу может сделать то, что вам нужно? github.com/celery/kombu

2. @IainShelvington Я посмотрел на RabbitMQ и Сельдерей, но Redis кажется хорошей легкой альтернативой для небольшого проекта

3. kombu имеет встроенную поддержку redis

4. @IainShelvington посмотрит. Спасибо!