Я пытаюсь преобразовать приложение Flask в приложение Quart, чтобы добавить асинхронный модуль и повысить производительность, как описано в этой статье .Для этого я подключаюсь к корзине Couchbase с помощью объекта acouchbase.Bucket.Проблема в том, что кварта работает медленнее и вылетает во время нагрузочного теста.Вот код, который я пытаюсь:
import asyncio
from quart import Quart, jsonify, g
from quart_openapi import Pint, Resource
import couchbase.experimental
couchbase.experimental.enable()
from acouchbase.bucket import Bucket
app = Pint(__name__, title = 'SomeTitle')
async def get_db():
"""
Helper function to initialize and retrive the Bucket object if not
already present.
"""
if not hasattr(g, 'cb_bucket'):
g.cb_bucket = Bucket('couchbase://localhost/bucketname', 'username', 'password')
await g.cb_bucket.connect()
return g.cb_bucket
@app.route("/apiname/<string:xId>")
class apiname(Resource):
async def get(self, xId):
cb = await get_db()
pickle_in = open('mlmodel', 'rb')
model = pickle.load(pickle_in)
y_pred_proba = model.predict_proba(Member).tolist()
return jsonify(y_pred_proba)
if __name__ == '__main__':
app.run(port = 5000, debug = True)
Приложение компилируется без проблем, хотя во время нагрузочного теста оно работает плохо и через некоторое время вылетает.Очень похожее приложение для колб (без какого-либо асинхронного модуля) работает быстрее, чем приложение для квартов, но можно ожидать, что кварта с асинхронным модулем будет быстрее, чем для приложения для колб:
Эквивалентный эквивалент колбы выглядит следующим образом:
from flask import Flask, jsonify
from flask_restplus import Api, Resource
from couchbase.cluster import Cluster
from couchbase.cluster import PasswordAuthenticator
# Coucbase connections
cluster = Cluster('couchbase://localhost/')
authenticator = PasswordAuthenticator('username', 'password')
cluster.authenticate(authenticator)
cb = cluster.open_bucket('bucketname')
app = Flask(__name__)
api = Api(app=app)
@api.route("/apiname/<string:xId>")
class apiname(Resource):
def get(self, xId):
Member = cb.get(xId)
pickle_in = open('mlmodel', 'rb')
model = pickle.load(pickle_in)
y_pred_proba = model.predict_proba(Member).tolist()
return jsonify(y_pred_proba)
if __name__ == '__main__':
app.run(port = 5000, debug = True)
Вот сравнение кварта и колбы.Flask выглядит в 10 раз быстрее, чем приложение Quart, которое останавливается после теста с этой ошибкой _ 96930 Ошибка сегментации_.
Кварт: Колба:
Любой ответ / рекомендация приветствуется.