gpt4 book ai didi

python - Flask-Sqlalchemy 和水平扩展以及范围 session

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:56 25 4
gpt4 key购买 nike

我在flask-sqlalchemy中有应用程序,我想水平缩放

@app.route('/read')
def read():
e = db.session.query(Example).get(1)
return e.value, 200


@app.route('/increase')
def increase():
e = db.session.query(Example).get(1)
e.value += 1
db.session.add(e)
db.session.commit()
return e.value, 200

有两个端点:

读取 - 获取 id = 1 的实体并获取值

increase = 获取 id = 1 的实体并增加值

然后我想水平扩展,并且flask-sqlalchemy不同步工作人员之间的 session 。因此,即使我增加了 worker 2 的值(value),也无法从 worker 1 获得实际值(value)

示例用户请求:

curl GET /read/ [worker-1]
1


curl GET /increase/ [worker-2]
2


curl GET /read/ [worker-1]
1

如您所见,sqlalchemy 不提供自动刷新 session 状态的工具。

解决这个问题的最佳方法是什么?使用新 session 进行新查询?或使用session.refresh(instance)。推荐的方法是什么?

最佳答案

您应该在每次请求后拆除 session 。 page on SQLAlchemy from the Flask website提供此片段:

from yourapplication.database import db_session

@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()

即使如此,对同一对象的并发编辑也不安全。如果您希望选择更新是原子的,则需要更改 session 的隔离级别(请参阅 this answer )。

关于python - Flask-Sqlalchemy 和水平扩展以及范围 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560689/

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