首页 > TAG信息列表 > contextmanager

redis分布式锁

from contextlib import contextmanager @contextmanager def lock(redis, lock_key, expire): try: locked = redis.set(lock_key, 'locked', expire) yield locked finally: redis.delete(lock_key) # 业务调用 with 代码块执行结束后 自动

上下文管理contextlib

contextmanager from contextlib import contextmanager class Query(object): def __init__(self, name): self.name = name def query(self): print('Query info about %s...' % self.name) @contextmanagerdef create_query(name):

Python进阶——什么是上下文管理器?

在 Python 开发中,我们经常会使用到 with 语法块,例如在读写文件时,保证文件描述符的正确关闭,避免资源泄露问题。 你有没有思考过, with 背后是如何实现的?我们常常听到的上下文管理器究竟是什么? 这篇文章我们就来学习一下 Python 上下文管理器,以及 with 的运行原理。 with语法块 在

浅谈 python 中的上下文管理

with 语法 平常在写Python代码的时候,经常会用到with 来处理一个上下文环境,比如文件的打开关闭,数据库的连接关闭等等。 with语法的使用,需要我们处理的对象实现__enter__和__exit__两个魔术方法来支持。__enter__函数处理逻辑函数之前需要做的事情,并返回操作对象作为as后面的变量,__

使用上下文管理器将python脚本输出到文件吗?

我正在编写一个脚本,我可以选择在脚本中将其结果打印到stdout还是预定义的结果文件中,并通过命令行传递.如下所示.我现在已经阅读了一些有关Python中上下文管理器的内容,但是我不确定在这种特定情况下是否以及如何使用上下文管理器.所以我在寻找建议 >在此问题中使用上下文管理器是

python中的装饰器与在函数上调用函数完全相同吗?

我以为 @f def g(): print 'hello' 与…完全相同 def g(): print 'hello' g=f(g) 但是,我有这段代码,它使用contextlib.contextmanager: @contextlib.contextmanager def f(): print 1 yield print 2 with f: print 3 有效并产生1 3 2 当我尝试将其更改

python – 用于验证数据的上下文管理器

我正在努力考虑一个很好的解决方案,并没有想到任何事情.作为练习,我正在尝试创建一个将处理数据验证的上下文管理器,例如: validation = lambda x: len(x) <= 10 with validator(validation): some_data = input("Please enter a name of 10 characters or less: ") print(so

python – 没有“as”关键字的“with”语句的含义

我熟悉使用python的with语句作为在抛出异常时确保对象完成的一种方法.这通常看起来像 with file.open('myfile.txt') as f: do stuff... 这是短手的 f = file.open('myfile.txt'): try: do stuff... finally: f.close() 或者班级可能提出的任何其他终结程序. 我最

Python中的上下文管理器和装饰器之间的区别

两者之间的主要区别是什么?我一直在研究Python并遇到过它们.装饰器本质上是一个包装另一个函数的函数,你可以在特定函数执行之前和之后做任何事情. def my_decorator(some_function): def wrapper(*args, **kwargs): print("Do something before the function is calle

如何在装饰器中使用上下文管理器以及如何将在decorator中创建的对象传递给装饰函数

我有一个测试类,需要在最后进行一些清理.为了确保用户不会忘记这样做,我想在类中添加一个上下文管理器.我还有一个装饰器,我想在其中使用此上下文管理器来创建测试类的对象并将其传递给装饰函数.它甚至可能吗? 这就是我要做的事情: class test: def __init__(self, name):

python – 是否可以访问上下文管理器的__exit __()方法中的上下文对象(代码块)?

我想在exit()方法中再次调用代码对象,如果它引发异常(可能是几次,可能有延迟).我知道装饰器很容易,但我的动机是有时候我想重复一些代码片段,我不想提取到一个单独的函数并装饰它.我正在寻找这些方面的东西: class again(object): def __enter__(self): pass def

python – 检测上下文管理器嵌套

我最近一直想知道是否有办法检测上下文管理器是否嵌套. 我创建了Timer和TimerGroup类: class Timer: def __init__(self, name="Timer"): self.name = name self.start_time = clock() @staticmethod def seconds_to_str(t): return str(time

是否有可能创建一个上下文敏感的python上下文管理器来保存,修改和恢复状态?

我有一对python函数,目前在两个值之间翻转一个全局变量.我想把它们变成上下文管理器,所以我可以像块一样使用它们,在块中设置变量,但之后恢复它.这是所需的行为: >>> MODE 'user' >>> mode_sudo() # Sets MODE to 'sudo'... >>> MODE 'sudo' >>> mode_user() # Sets MODE to

python – 在体内代码之前调用的上下文管理器出口

我一直在玩Python自己的上下文管理器.我看到一些奇怪的行为很可能是由于我的实施. 我看到在’with’上下文中的语句之前调用的__exit__代码.例如,以下是代码段: with ProgressBar(10) as p: p.update(1) 这是例外: Traceback (most recent call last): File "<stdin>", line 3

Python:在类方法上使用contextmanager的意外行为

参见英文答案 > “Least Astonishment” and the Mutable Default Argument                                    32个 >            Python constructor and default value                          

python – 为zipfile定义的__enter__和__exit__在哪里?

基于with statement >加载上下文管理器的__exit __()以供以后使用. >调用上下文管理器的__enter __()方法. 我见过其中一个用于zipfile的用法 问题&GT我已经检查了位于这里的zipfile的源代码: /usr/lib/python2.6/zipfile.py 我不知道__enter__和__exit__函数的定义在哪里? 谢谢解决

python – 有没有办法在ContextDecorator中访问函数的属性/参数?

我正在尝试使用Python的contextlib.ContextDecorator类编写上下文管理器装饰器. 有没有办法在上下文管理器中访问修饰函数的参数? 这是我正在做的一个例子: from contextlib import ContextDecorator class savePen(ContextDecorator): def __enter__(self): self.prev

在“with”中嵌入Python上下文管理器的迭代器

我有一个返回上下文管理器的迭代器. 我想要一个pythonic with语句,它模拟几个嵌套语句的行为,一个用于迭代器返回的每个上下文管理器. 可以说,我想要(不推荐使用)contextlib.nested函数的推广.解决方法:从docs: Developers that need to support nesting of a variable number of

Python如何通过Context Manager强制对象实例化?

我想通过类上下文管理器强制对象实例化.所以不可能直接实例化. 我实现了这个解决方案,但从技术上讲,用户仍然可以实例化对象. class HessioFile: """ Represents a pyhessio file instance """ def __init__(self, filename=None, from_context_manager=False):

暂时在Python中更改变量的值

Python 3.4提供了这个简洁的工具来暂时重定向stdout: # From https://docs.python.org/3.4/library/contextlib.html#contextlib.redirect_stdout with redirect_stdout(sys.stderr): help(pow) The code并不是非常复杂,但我不想一遍又一遍地写它,特别是因为一些想法已经进入

在Python2.7上下文管理器类中处理异常的正确方法

我正在为一个正在研究的项目提供几个上下文管理器.它即将发货,我遇到了一些我开始恐慌的事情. 我的印象是你不应该再加上作为上下文管理器类的__exit__方法的参数传递的异常.但是,我正在进行一些测试,看起来上下文管理器正在抑制一个被抛入其中的异常.当我将__exit__方法更改为如下

python – 如何__enter__ n上下文管理器?

使用with语句,我们可以只使用一个级别的缩进/嵌套来输入许多上下文处理程序: >>> from contextlib import contextmanager >>> @contextmanager ... def frobnicate(n): ... print('frobbing {}'.format(n)) ... yield ... >>> frob1 = frobnicate(1) >>

python – with语句中的条件或可选上下文管理器

假设我有一些我正在使用的上下文管理器(来自第三方库): with freeze_time(test_dt): lines_of_code_1 lines_of_code_2 lines_of_code_3 但是,假设如果test_dt没有值,则上下文管理器不应该运行,但是所有剩余的代码都应该运行,如下所示: if test_dt: with freeze_t

functools.wraps不允许我用Python 3中的类包装函数

我想为一些将文件作为第一个参数的函数编写装饰器.装饰器必须实现context manager protocol(即将包装函数转换为上下文管理器),所以我想我需要用类包装函数. 我对装饰模式并不熟悉,之前从未实现过上下文管理器,但是我编写的内容在Python 2.7中工作,如果我注释掉换行符,它也适用于Py

python – 上下文管理员是否适合这份工作?

下面粘贴的代码执行以下操作: >创建一个导入钩子 >创建一个上下文管理器,用于设置meta_path并在退出时清除.>转储在imports.log中输入的程序完成的所有导入 现在我想知道在这种情况下使用上下文管理器是否是一个好主意,因为实际上我没有标准的try / finally流程,只是设置和清理. 另