Небезопасно ли получать будущее из contextlib asynccontextmanager?Python

Программы на Python
Anonymous
Небезопасно ли получать будущее из contextlib asynccontextmanager?

Сообщение Anonymous »

Мне нужен менеджер контекста, вложенный в класс, который при выходе возвращает значение в зависимости от того, что произошло в блоке кода. По сути, это будет анализировать содержимое файла журнала во время работы блока кода.
В настоящее время я могу это сделать:

Код: Выделить всё

print("start")
# do something here
print("end")
res = await check_log() # check in the log if something's happened
# between start and end and return the line if so
Мне интересно, могу ли я вместо этого использовать asynccontextmanager contextlib, который выглядит так:

Код: Выделить всё

class foo():
def __init__(self, ...):
...

@asynccontextmanager
async def bar(self):
print("start")
fut = asyncio.Future()
yield fut
print("end")
res = await check_log()
fut.set_result(res)
и который я называю так:

Код: Выделить всё

obj = foo(...)

async with foo.bar() as b:
# do something here

res = b.result()
Есть ли в этом что-то принципиально небезопасное или неправильное? Если да, то есть ли лучший способ сделать это? Я знаю, что с помощью обычного менеджера контекста вы можете обойти это, установив атрибут, хотя я не уверен, что это возможно с помощью contextlib.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ger-unsafe

Вернуться в «Python»