#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 посмотрит. Спасибо!