gpt4 book ai didi

python - SQLite + Flask 偶尔需要 10-20 秒来返回简单的选择查询

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:52 24 4
gpt4 key购买 nike

我在构建的小型 SQLite + Flask python 应用程序中遇到了问题。该应用程序通过多个端点提供 JSON——一次不超过 150kb。在一些不活动之后,应用程序将需要 10-25 秒来返回通常在不到 1 秒内返回的查询。在这 10-25 秒内,对应用程序的其他查询同样会被阻止。该应用程序从不写入 sqlite 数据库;它只会读取它。

到目前为止我已经尝试过:

  1. 创建单例以保持与数据库的单个打开连接,因此并非每个查询都必须重新打开连接。

  2. 将数据库文件本身放在内存文件系统上以加快访问时间。

  3. 增加托管文件的虚拟专用服务器上的内存(现在有很多可用内存,没有任何内容交换到磁盘)

  4. 将 sqlite 数据库的内容加载到内存中的 sqlite 数据库中,并在每次查询时从中读取。

这些都没有解决问题,而且我的选项用完了 --- 我想解决这个问题并坚持使用 SQLite,但如果这不可能,我将使用 Postgres 重构我的应用程序。

下面是读取数据库的flask代码:

@app.route('/filings/<int:year>', methods=['GET'])
@crossdomain(origin='*')
def getFilings ( year ):

if request.method == 'GET':
q = 'SELECT '
for c in Filings.columns:
q = q + c + ','
q = q[:-1] # remove trailing comma

q = q + ' FROM filings'
q = q + ' WHERE filings.date LIKE \'' + str(year) + '%\''

print "about to execute sql query:"
print " " + q

con = lite.connect('/mnt/memfs/filings.db')
cur = con.cursor()
cur.execute(q)

rows = cur.fetchall()

jsonrt = [ ]
for row in rows:
d = { }
x = 0
for c in Filings.columns:
d[c] = row[x]
x = x + 1
jsonrt.append(d)

con.close()
return jsonify(items=jsonrt)

最佳答案

经过多次故障排除后,我发现我缺少我设计的系统的一个重要组件:一个 Web 服务器网关接口(interface) (wsgi) —— 就像 gunicorn —— 来处理 flask 的并发性。没有它,我的开发阶段 Flask 应用一次只能处理一个并发请求。

在将我的 Flask 应用程序设置为围绕 gunciron 运行并部署 4 个异步 worker 来处理并发后,问题似乎立即得到解决。

所有这些都在精心编写的 Flask 文档中:http://flask.pocoo.org/docs/deploying/

关于python - SQLite + Flask 偶尔需要 10-20 秒来返回简单的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com