|
|
|
@ -38,22 +38,53 @@ def _get_template(templ_file: str) -> str:
|
|
|
|
|
return template |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_records_count() -> int: |
|
|
|
|
async with aiohttp.ClientSession() as session: |
|
|
|
|
pass |
|
|
|
|
async def get_records_count(session, server) -> int: |
|
|
|
|
"""Возвращает количество записей в базе.""" |
|
|
|
|
async with session.get(f"{server}/count") as resp: |
|
|
|
|
r = await resp.json() |
|
|
|
|
count: int = int(r["result"]) |
|
|
|
|
return count |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_tasks(session, server, count, body, request_portion) -> list: |
|
|
|
|
"""Вернет список запросов к API. |
|
|
|
|
|
|
|
|
|
Функция не ограничивает кол-во запросов, это нужно сделать до |
|
|
|
|
вызова, чтобы передать корректный `session`. |
|
|
|
|
""" |
|
|
|
|
tasks = [] |
|
|
|
|
offset = 0 |
|
|
|
|
for r in range(count // request_portion + 1): |
|
|
|
|
if offset < count: |
|
|
|
|
print(f"{offset=}") |
|
|
|
|
tasks.append(asyncio.create_task(session.get(f"{server}/get", json=body))) |
|
|
|
|
offset += request_portion |
|
|
|
|
body["offset"] = offset |
|
|
|
|
|
|
|
|
|
print(f"{count=}") |
|
|
|
|
return tasks |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# изменить сигнатуру на (cfg: Conifg, json_body: dict) |
|
|
|
|
async def send_async_request(cfg: dict, columns: list, limit: int = 1) -> None: |
|
|
|
|
body = {"columns": columns, "limit": 1} |
|
|
|
|
request_portion = 10 |
|
|
|
|
requests_count = 10 |
|
|
|
|
server = cfg["central_host_url"] |
|
|
|
|
path_to_template_file = cfg["template"] |
|
|
|
|
path_for_config = cfg["path_for_config"] |
|
|
|
|
|
|
|
|
|
template: str = _get_template(path_to_template_file) |
|
|
|
|
|
|
|
|
|
async with aiohttp.ClientSession() as session: |
|
|
|
|
tasks = [session.get(server, json=body) for i in range(limit)] |
|
|
|
|
# ограничим одновременное число запросов |
|
|
|
|
conn = aiohttp.TCPConnector(limit=requests_count) |
|
|
|
|
|
|
|
|
|
async with aiohttp.ClientSession(connector=conn) as session: |
|
|
|
|
# всего записей в базе |
|
|
|
|
count = await get_records_count(session, server) |
|
|
|
|
|
|
|
|
|
body = body = {"columns": columns, "limit": request_portion, "offset": 0} |
|
|
|
|
tasks = await get_tasks(session, server, count, body, request_portion) |
|
|
|
|
|
|
|
|
|
responses = await asyncio.gather(*tasks) |
|
|
|
|
|
|
|
|
|
for response in responses: |
|
|
|
|