用上下文安全变量和服务替换全局变量

Contextual的Python项目详细描述


可更换单体

下面是用peak.context实现的一个简单的"全局"计数器服务 看起来像:

>>> from peak import context

>>> class Counter(context.Service):
...     value = 0
...
...     def inc(self):
...         self.value += 1
...

>>> Counter.value
0
>>> Counter.inc()
>>> Counter.value
1

希望使用此全局计数器的代码只调用 counter.inc() 或 访问计数器.value,它将自动使用右边的计数器 当前线程或任务的实例。想用新的柜台 考试?只要这样做:

with Counter.new():
    # code that uses the standard count.* API

with 块中,任何引用 count 的代码都将使用 新的计数器实例。如果需要支持Python2.4,则 上下文库还包括一个decorator,它用 模拟a 声明:

>>> Counter.value     # before using a different counter
1

>>> @context.call_with(Counter.new())
... def do_it(c):
...     print Counter.value
0

>>> Counter.value     # The original counter is now in use again
1

带有装饰符的call_比带有政治家的call_要丑一点但 它也起作用了。你也可以用老式的try finally block, 或其他一些前后机制,如 setup() teardown() 替换和还原活动实例的测试方法。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JMeter未正确解码base64将导致生成空白PDF   java我如何添加javax。媒体jai.*项目中的包?   java是我的公式错了还是有任何一行代码使它错了?   java Android:后退按钮跳过webView   使用Java CDI Weld重新连接到对话   带有表粘贴的java网格web组件   java在JTable中编辑时防止重复值   java Jersey获取摘要或基本HTTP身份验证用户和密码   java如何检查Android EditText整数值?   html如何使用Java从网站中提取动态字符串/单词   java如何解决使用Boilerpipe时的ConnectException错误?   java获取hadoop名称节点格式   Java中占位符解析器的解析   JavaSpringWebhook端点获取整个主体以及pojo   Java:将颜色字符串值转换为十六进制值   捕捉光标时受帧率影响的java LibGDX鼠标灵敏度   java Spring MVC实现大型应用程序DTOs/ViewModels的最佳实践?   基于特性的java模块化安卓应用   java Spring控制器请求参数作为来自jQuery get()的POJO