У меня есть проект Python 3.7, который общается с Datastore с помощью библиотеки google.cloud.ndb.
Я заметил, что первый запрос при запуске экземпляра всегда на порядок (несколькосекунд) медленнее, чем последующие. Это верно даже при локальном запуске с эмулированным хранилищем данных. Я проверил, что задержка вызвана первым ndb.Key(...).get()
, который запускается. Предположительно подключение к хранилищу данных занимает некоторое время для настройки?
Кто-нибудь нашел способ уменьшить эту задержку?
Пример кода:
from flask import Flask
from google.cloud import ndb
import time
client = ndb.Client()
def ndb_wsgi_middleware(wsgi_app):
def middleware(environ, start_response):
with client.context():
return wsgi_app(environ, start_response)
return middleware
app = Flask(__name__)
app.wsgi_app = ndb_wsgi_middleware(app.wsgi_app)
@app.route('/main')
def main():
now_ts = time.time()
org = ndb.Key(Org, 1).get()
print('Finished get in %f' % (time.time() - now_ts))
return 'Does not exist' if org is None else 'Exists'
class Org(ndb.Model):
pass
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
Вывод после 2 localhost:8080/main
извлекает из браузера (используя эмулятор локального хранилища данных, вызванный командой gcloud beta emulators datastore start
):
Finished get in 2.043116
127.0.0.1 - - [09/Oct/2019 22:41:49] "GET /main HTTP/1.1" 200 -
Finished get in 0.001995
127.0.0.1 - - [09/Oct/2019 22:41:56] "GET /main HTTP/1.1" 200 -