Подтвердить что ты не робот

Aiohttp - исключение игнорируется сообщение

Я запускаю следующий код, который делает 5 запросов через aiohttp:

import aiohttp
import asyncio

def fetch_page(url, idx):
    try:
        url = 'http://google.com'
        response = yield from aiohttp.request('GET', url)

        print(response.status)
    except Exception as e:
        print(e)

def main():
    try:
        url = 'http://google.com'
        urls = [url] * 5

        coros = []
        for idx, url in enumerate(urls):
            coros.append(asyncio.Task(fetch_page(url, idx)))

        yield from asyncio.gather(*coros)
    except Exception as e:
        print(e)

if __name__ == '__main__':
    try:
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
    except Exception as e:
        print(e)

Вывод:

200
200
200
200
200
Exception ignored in: Exception ignored in: Exception ignored in: Exception ignored in: Exception ignored in:

Примечание. Нет дополнительной информации о том, что/где исключение.

Что вызывает это и есть ли какие-нибудь подсказки для его отладки?

4b9b3361

Ответ 1

Я не совсем уверен, почему, но кажется, что оставить объект aiohttp.ClientResponse открытым, вызывая исключение недопустимого исключения, когда переводчик выходит. В моей системе это приводит к таким предупреждениям, а не к сообщениям "Исключение игнорируется":

sys:1: ResourceWarning: unclosed <socket object at 0x7f44fce557a8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fce55718>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24a78>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc248c8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24958>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc249e8>
sys:1: ResourceWarning: unclosed <socket object at 0x7f44fcc24b08>

В любом случае вы можете исправить это, явно закрыв объект ClientResponse в конце fetch_objects, вызвав response.close().