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