Асинхронный менеджер контекста Python должен вызвать исключение для вызывающей стороны - PullRequest
0 голосов
/ 22 октября 2019

У меня есть менеджер контекста, который используется следующим образом:

async with await MyContextManager() as cm:
    # cm is now doing heavy processing in the background until
    # it's told to stop...
    await asyncio.sleep(1)  # simulate doing other things while
                            # cm continues to process
    # more processing
    await cm.change_behavior()
    # cm is now has even more work that it's processing...
    while True:
        await asyncio.sleep(1)
        # cm just continues until it's told to stop, so this
        # loop ensures it never stops

Если MyContextManager.change_behavior() выдает исключение, все хорошо, вызывающий может его перехватить или проигнорировать или что-то еще. Но что, если диспетчеру контекста нужно вызвать исключение во время sleep() вызывающего блока? Другими словами, если это долгоживущий фоновый процесс, который сталкивается с ошибкой, как я могу уведомить блок with об исключении?

Увеличенное изображение

Диспетчер контекста в этом случае является в основном контроллером связи. Сообщения принимаются и отправляются и т. Д. Процесс вызова в основном заботится только о том, что менеджер контекста делает свое дело, но также иногда отправляет сообщения в КМ, чтобы изменить состояние связи. Что мне нужно, так это возможность узнать, что менеджер контекста работает успешно, или выйти из блока кода, если что-то пойдет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...