在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')
else:
print('End')
def query(self):
print('Query info about %s...' % self.nam

Python的上下文管理涉及线程隔离、Flask应用、`with`语句及生成器。`with`用于资源操作如文件打开,通过定义`__enter__`和`__exit__`方法自定义管理。`@contextmanager`装饰生成器,`@closing`辅助资源关闭。在Flask中,请求上下文保证了request、session、g对象的隔离。
最低0.47元/天 解锁文章
8521

被折叠的 条评论
为什么被折叠?



