在python中上下文是一个看得见摸得着的对象,我们当前程序跑的环境信息都可以被称为上下文。
在多线程中,新创建一个线程就意味着新 创建一个上下文(thread local),而多线程里的多个上下文相互隔离,这也是flask实现的高明之处。
常见上下文的使用场景:
-
Flask 里面的dispatch 函数,就是为每个request 创建一个类似于threadlocal的一种东西,在视图函数中使用的request ,session,g 相互隔离
-
with 用法,打开一个问题 open
-
面向对象里 class 中定义 __enter__ 和__exit__ 来定制 with 用法,可以用于连接,断开,资源释放
-
@contextmanager 装饰一个生成器函数,就是含有yield
-
@closing 包函数
-
click 模块中也有ctx的使用,可以在不同命令通过里面调用上下文的方式传递数据
举例 :
class
class Query(object):
def __init__(self, name):
self.name = name
def __enter__(self):
print('Begin')
return self
def __exit__(self, exc_type, exc_value, traceback):
if exc_type:
print('Error')
e