Коробка с питоном
Shielded execution в asyncio
Допустим, есть следующий обработчик, который производит оплату:
async def handler(request):
await service.pay(request.user)
return web.Response(text="payed")
Если соединение отвалится то обработчик упадет с ошибкой, так как серверу будет некуда отправлять ответ. Задача должна отмениться, но что если мы хотим, чтобы она выполнилась наверняка?
Поможет нам в этом asycio.shield(). Он защищает задачу от отмены, даже в случае возникновения ошибки. Выглядит это следующим образом:
async def handler(request):
await asyncio.shield(service.pay(request.user))
return web.Response(text="payed")
#asyncio #std
5 · 467 ·