此问题已经在这里有了答案:
我来自Java世界,对Python中的可变作用域非常困惑:
from flask import Flask, request
@app.route('/', methods=['POST'])
def handle():
form = request.form
在与我一起工作的HTTP服务器中,习惯于将request
之类的变量作为方法参数传递或从ThreadLocal
中检索。为什么在这种情况下Flask / Python使用全局变量?它是线程安全的吗?
Flask使用了一些技巧,因此每个线程看到一个不同的请求对象。他们将其称为“上下文”,其作用类似于线程局部变量。
请参见ThreadLocal
:
上下文对于每个线程(或其他工作程序类型)都是唯一的。请求无法传递给另一个线程,另一个线程将具有不同的上下文堆栈,并且将不知道父线程指向的请求。
[这是Flask做出的使事情变得简单的设计决定。其他框架可以使用其他方式,例如将documentation对象显式传递给该函数。
首先在本地范围内搜索变量,如果找不到,则开始在全局范围内搜索。
请求未在处理方法中定义,这就是为什么使用全局方法的原因