如何解决如何共享在 Flask 上下文之外创建的会话值?
如何将线程创建的内容存储在会话中,以便稍后在另一个请求中访问该值?
这是一个示例:
@app.route('/one')
def one():
@copy_current_request_context
def x():
session['status'] = "done"
t = threading.Thread(target=x)
t.start()
return "One"
@app.route('/two')
def two():
status = session['status']
return "Two: {}".format(status)
在上面的示例中,我将线程中的“状态”(我需要运行该线程)存储在 /one 请求中,但稍后,假设 5 秒,我想检查另一个请求中的状态 (/two) .
@copy_current_request_context 是否也制作了会话/请求的只读(或读写)副本?
解决方法
最简单且不知何故最好的答案是使用已完全Here 描述的全局变量。
但是如果您的应用程序要扩展并且您需要与其他实例共享此数据,您可以使用“Redis”作为快速内存数据库。 More details
,- 通过使用@soroosh-khodami 的建议,我能够实现我想要的。波纹管是可以做到这一点的代码。
warehouse = {} # This associative array will keep the data
@app.route('/one')
def one():
global warehouse
@copy_current_request_context
def x():
warehouse['status'] = "done"
t = threading.Thread(target=x)
t.start()
return "One"
@app.route('/two')
def two():
global warehouse
status = warehouse['status']
return "Two: {}".format(status)
当然,这是一个幼稚的实现 - 因为这个对象 warehouse 将在所有请求和会话之间共享 - 所以应该有一个保护机制(例如:1.Store all things from a某个键下的会话 2. 有一个清理线程等)
奖励:除此之外,即使在非开发环境(例如:Twisted 服务器)中也能正常工作
- 是的,@copy_current_request_context 制作上下文的只读副本(就我测试而言)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。