【发布时间】:2019-10-04 06:37:59
【问题描述】:
我有一个 Python 3.7 项目,它使用 google.cloud.ndb 库与 Datastore 进行通信。
我注意到,启动实例时的第一个请求总是比后续请求慢一个数量级(几秒)。即使使用模拟数据存储在本地运行也是如此。我已经确认延迟是由于第一个运行的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 -
【问题讨论】:
-
我有一个用 go 编写的应用程序,对模拟器的第一次查询发生在 300 毫秒内。当然,如果您将模拟器与应用程序一起启动,模拟器本身需要时间(几秒钟)才能启动。
-
有趣,我的第一个模拟器查询似乎总是需要几秒钟...
标签: google-app-engine google-cloud-datastore google-app-engine-python