asyncio.exceptions.TimeoutError

Объясните в чем ошибка. Получаю это

Traceback (most recent call last):
  File "/home/egor/Documents/tradeBot/AIServer/db_road/app.py", line 38, in <module>
    asyncio.run(app.main())
  File "/usr/lib/python3.8/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/egor/Documents/tradeBot/AIServer/db_road/app.py", line 32, in main
    await securities_t
  File "/home/egor/Documents/tradeBot/AIServer/db_road/models/securities.py", line 37, in start
    await self.post(session, server_data, self.name, new_new_data)
  File "/home/egor/Documents/tradeBot/AIServer/db_road/models/main.py", line 61, in post
    await session.post(url=self.dataset_server[name], data=json.dumps(data))
  File "/usr/lib/python3.8/site-packages/aiohttp/client.py", line 504, in _request
    await resp.start(conn)
  File "/usr/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 860, in start
    self._continue = None
  File "/usr/lib/python3.8/site-packages/aiohttp/helpers.py", line 596, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError
Task exception was never retrieved
future: <Task finished name='Task-6' coro=<History.start() done, defined at /home/egor/Documents/tradeBot/AIServer/db_road/models/history.py:9> exception=TimeoutError()>
Traceback (most recent call last):
  File "/home/egor/Documents/tradeBot/AIServer/db_road/models/history.py", line 78, in start
    await self.post(session, server_data, self.name, new_new_data)
  File "/home/egor/Documents/tradeBot/AIServer/db_road/models/main.py", line 61, in post
    await ession.post(url=self.dataset_server[name], data=json.dumps(data))
  File "/usr/lib/python3.8/site-packages/aiohttp/client.py", line 504, in _request
    await resp.start(conn)
  File "/usr/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 860, in start
    self._continue = None
  File "/usr/lib/python3.8/site-packages/aiohttp/helpers.py", line 596, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutErrorsession.post(url=self.dataset_server[name], data=json.dups(data))
  File "/usr/lib/python3.8/site-packages/aiohttp/client.py", line 504, in _request
    await resp.start(conn)
  File "/usr/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 860, in start
    self._continue = None
  File "/usr/lib/python3.8/site-packages/aiohttp/helpers.py", line 596, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutErrorps(data))
  File "/usr/lib/python3.8/site-packages/aiohttp/client.py", line 504, in _request
    await resp.start(conn)
  File "/usr/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 860, in start
    self._continue = None
  File "/usr/lib/python3.8/site-packages/aiohttp/helpers.py", line 596, in __exit__
    raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError

Начинается все здесь:

engines_t = asyncio.create_task(self.engines.start(session))
markets_t = asyncio.create_task(self.markets.start(session))
boards_t = asyncio.create_task(self.boards.start(session))
securities_t = asyncio.create_task(self.securities.start(session))
history_t = asyncio.create_task(self.history.start(session))

await engines_t
await markets_t
await boards_t
await securities_t
await history_t

Далее пример одного из классов(они все похожи):

class Securities(Main):
    def __init__(self):
        self.name = "securities"  # Название таблицы

    async def start(self, session):
        boards = await self.download(session, "boards")  # Данные с сервера ("boards")
        server_data = await self.download(session, self.name)  # Целевые данные с сервера для проверки

        # Загрузка securities по каждому board
        for board in boards.get("boards"):
            async with session.get(self.get_securities(board.get("engine_name"), board.get("market_name"),
                                                       board.get("board_id"))) as resp:
                securities = await resp.json()  # Данные с биржи

                for data in securities.get(self.name).get("data"):
                    # Объединение массивов (столбцов и данных) в словарь
                    new_data = dict(zip(securities.get(self.name).get("columns"), data))

                    # Проще создать новый словарь, чем изменить исходный
                    new_new_data = {}

                    # Переименование ключей
                    if new_data.get("SECID") is not None:
                        new_new_data["sec_id"] = new_data.pop("SECID")
                    if new_data.get("BOARDID") is not None:
                        new_new_data["board_id"] = new_data.pop("BOARDID")

                    # Добавление информации
                    new_new_data["market_name"] = board.get("market_name")
                    new_new_data["engine_name"] = board.get("engine_name")

                    # Здась нет id у исходного dataset. Удалять нечего.
                    # Проверка на совпадение и загрузка в БД
                    await self.post(session, server_data, self.name, new_new_data)

И источник ошибки(в этих двух функциях):

async def post(self, session, server_data, name, data):
    coincidence = False

    if len(server_data[name]) > 0:
        for _data in server_data[name]:
            if _data.get('id') is not None:
                _data.pop('id')
            if data == _data:
                coincidence = True
                break

    if coincidence is False:
        await session.post(url=self.dataset_server[name], data=json.dumps(data))

async def download(self, session, name):
    async with session.get(self.dataset_server.get(name)) as resp:
        return await resp.json()

В чем может быть проблема?


Ответы (1 шт):

Автор решения: Егор Кузнецов

Решилось изменением
await session.post(url=self.dataset_server[name], data=json.dumps(data))
на
async with session.post(url=self.dataset_server[name], data=json.dumps(data)) as resp: pass

→ Ссылка