在介绍源码之前,我们先谈谈什么是 context. 一开始不太理解什么是 context,其实它是一个统称,在不同的地方有不同的含义,所以不是很直白。context 翻译成中文是“上下文”的意思,说白了和文章的上下文是一个意思,通俗一点讲就是环境。例如用户信息,token 之类的。如果还是不明白,看看下面的例子。
openstack 的 context 主要是用来保存 http request 相关信息。 context 模块主要定义了一个 RequestContext 类,里面保存了跟 request 请求相关的信息:
1 | class RequestContext(object): |
先看官方文档给的一个例子:
1 | from oslo_config import cfg |
上面的代码打印结果如下:
1 | 2016-01-20 21:56:29.283 8428 INFO __main__ [-] Message without context |
看到上面的打印,有些人可能会有疑问,代码中只创建了 context.RequestContext 对象,并未赋值给 LOG, LOG 是怎么获取 request_id 的,实际上,RequestContext 对象创建之后会保存在 threading.local() 中,所以当前线程的其它代码都可以读取到 RequestContext 的值。