Что означает «Не удается записать в закрывающий транспорт»?

Вопрос: Я получаю исключение "Cannot write to closing transport" возникшее из aiohttp.http_writer.StreamWriter#_write, но только в некоторых случаях. Соответствующий фрагмент. session: aiohttp.ClientSession async with session.get(url, timeout=60) as response: txt = await response.text() response.close() return txt Что здесь происходит? Я не думаю, что размер сервера закрывает сокет. Лучший ответ: Ответ: Мы должны создавать новую сессию по каждому

Вопрос:

Я получаю исключение «Cannot write to closing transport» возникшее из aiohttp.http_writer.StreamWriter#_write, но только в некоторых случаях.

Соответствующий фрагмент.

session: aiohttp.ClientSession async with session.get(url, timeout=60) as response: txt = await response.text() response.close() return txt

Что здесь происходит? Я не думаю, что размер сервера закрывает сокет.

Лучший ответ:

Ответ: Мы должны создавать новую сессию по каждому запросу. Также нет необходимости явно закрывать response(), так как менеджер контекста обрабатывает это.

async with aiohttp.ClientSession().get(url, timeout=60) as response: txt = await response.text() return txt Ответ №1

Это означает, что ваше соединение уже закрыто. Это происходит, когда клиент разрывает соединение, но сервер все еще пытается ответить ему.

Удалите response.close() из вашего кода.

Ответ №2

Это происходит, если клиент преждевременно отключается, прежде чем прочитать часть или весь ответ. Вы можете часто сталкиваться с этим случаем, если вы имеете дело с мобильными клиентами (которые могут переключаться между WiFi и мобильными сетями) или если у вас есть просмотры, которые занимают некоторое время, но у клиентов меньше время ожидания. Поскольку вы не можете контролировать, как клиенты разговаривают с вашим сервисом, вероятно, это безопасно игнорировать.

aiohttp 3.6.0 introduces code to slience this exception

Оцените статью
Добавить комментарий