有没有使用上下文管理器传递参数的方法?以下是我想做的:
async with self.request.app['expiration_lock']('param'):
但我得到了一个错误:
TypeError: 'OrderStatusLock' object is not callable
类orderstatuslock:
class OrderStatusLock(_ContextManagerMixin, Lock):
def __init__(self, *args, loop=None):
print(args)
self._waiters = None
self._locked = False
if loop is None:
self._loop = events.get_event_loop()
else:
self._loop = loop
async def acquire(self, *args):
print('acq', args)
if (not self._locked and (self._waiters is None or
all(w.cancelled() for w in self._waiters))):
self._locked = True
return True
if self._waiters is None:
self._waiters = collections.deque()
fut = self._loop.create_future()
self._waiters.append(fut)
try:
try:
await fut
finally:
self._waiters.remove(fut)
except CancelledError:
if not self._locked:
self._wake_up_first()
raise
self._locked = True
return True
如果可能的话,我可以用这个来面对什么问题?非常感谢你。
1条答案
按热度按时间sd2nnvve1#
你的问题有很多,我不知道你的答案在哪里
_ContextManagerMixin
班级来自中国。我对异步也不太了解。然而,这里有一个简单的(非异步)模式演示,其中一个参数可以传递给上下文管理器,从而改变
__enter__
上下文管理器的方法进行操作。请记住:上下文管理器的核心只是一个实现
__enter__
方法与示例__exit__
方法。这个__enter__
方法在with
块,和__exit__
方法的末尾调用with
块这个
__call__
在我的示例类中添加的方法在__enter__
方法和,与__enter__
方法,可以使用参数调用。这个__exit__
方法负责清理__call__
方法和步骤__enter__
方法。n、 b.我上面的示例将抑制在
with
陈述如果不想抑制任何异常,或者只想抑制某些类型的异常,则需要更改__exit__
方法。还要注意,这些函数的返回值非常重要。
__call__
我必须回去self
如果您希望该类能够调用__enter__
.__enter__
我必须回去self
如果希望能够访问with
陈述__exit__
应该回来True
如果希望抑制异常,以及False
如果您希望遇到的异常继续在with
陈述这里有一个很好的上下文管理器教程,其中还包含一些关于如何使用
__aenter__
及__aexit__
方法:https://realpython.com/python-with-statement/