Добавлена обработка исключений в асинхронных задачах с помощью return_exceptions=True

This commit is contained in:
izzzzzi
2025-03-04 00:57:41 +05:00
parent 0dba6a6e42
commit d0125c1f33
6 changed files with 16 additions and 14 deletions
+3 -3
View File
@@ -514,7 +514,7 @@ async def handle_delete_key_confirm(
for cluster_name, cluster_servers in clusters.items():
for _ in cluster_servers:
tasks.append(delete_key_from_cluster(cluster_name, email, client_id))
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
await delete_key_from_servers()
await delete_key(client_id, session)
@@ -546,7 +546,7 @@ async def handle_delete_user_confirm(
servers = await get_servers()
for cluster_id, _cluster in servers.items():
tasks.append(delete_key_from_cluster(cluster_id, email, client_id))
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
except Exception as e:
logger.error(f"Ошибка при удалении ключей с серверов для пользователя {tg_id}: {e}")
@@ -665,7 +665,7 @@ async def change_expiry_time(expiry_time: int, email: str, session: Any) -> Exce
for cluster_name in clusters
]
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
await update_key_on_all_servers()
await update_key_expiry(client_id, expiry_time, session)
+1 -1
View File
@@ -259,7 +259,7 @@ async def create_key(
create_key_on_cluster(least_loaded_cluster, tg_id, client_id, email, expiry_timestamp, plan)
)
]
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
logger.info(f"[Key Creation] Ключ создан на кластере {least_loaded_cluster} для пользователя {tg_id}")
await store_key(
tg_id,
+8 -6
View File
@@ -43,7 +43,8 @@ async def create_key_on_cluster(
*(
create_client_on_server(server, tg_id, client_id, email, expiry_timestamp, semaphore, plan=plan)
for server in cluster
)
),
return_exceptions=True,
)
except Exception as e:
@@ -148,7 +149,7 @@ async def renew_key_in_cluster(cluster_id, email, client_id, new_expiry_time, to
extend_client_key(xui, int(inbound_id), unique_email, new_expiry_time, client_id, total_gb, sub_id)
)
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
except Exception as e:
logger.error(f"Не удалось продлить ключ {client_id} в кластере/на сервере {cluster_id}: {e}")
@@ -197,7 +198,7 @@ async def delete_key_from_cluster(cluster_id, email, client_id):
)
)
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
except Exception as e:
logger.error(f"Не удалось удалить ключ {client_id} в кластере/на сервере {cluster_id}: {e}")
@@ -256,7 +257,7 @@ async def update_key_on_cluster(tg_id, client_id, email, expiry_time, cluster_id
)
)
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
logger.info(f"Ключ успешно обновлен для {client_id} на всех серверах в кластере {cluster_id}")
@@ -301,7 +302,8 @@ async def update_subscription(tg_id: int, email: str, session: Any) -> None:
email,
expiry_time,
least_loaded_cluster_id,
)
),
return_exceptions=True,
)
await store_key(
@@ -378,7 +380,7 @@ async def get_user_traffic(session: Any, tg_id: int, email: str) -> dict[str, An
for server, api_url in servers_map.items():
tasks.append(fetch_traffic(api_url, client_id, server))
results = await asyncio.gather(*tasks)
results = await asyncio.gather(*tasks, return_exceptions=True)
for server, result in results:
user_traffic_data[server] = result
+2 -2
View File
@@ -382,11 +382,11 @@ async def process_callback_confirm_delete(callback_query: CallbackQuery, session
servers = await get_servers(session)
async def delete_key_from_servers():
try:
try: # lol
tasks = []
for cluster_id, _cluster in servers.items():
tasks.append(delete_key_from_cluster(cluster_id, email, client_id))
await asyncio.gather(*tasks)
await asyncio.gather(*tasks, return_exceptions=True)
except Exception as e:
logger.error(f"Ошибка при удалении ключа {client_id}: {e}")
+1 -1
View File
@@ -84,7 +84,7 @@ async def combine_unique_lines(urls: list[str], identifier: str, query_string: s
logger.info(f"Составлены URL-адреса: {urls_with_query}")
tasks = [fetch_url_content(url, identifier) for url in urls_with_query]
results = await asyncio.gather(*tasks)
results = await asyncio.gather(*tasks, return_exceptions=True)
all_lines = set()
for lines in results:
all_lines.update(filter(None, lines))
+1 -1
View File
@@ -90,7 +90,7 @@ async def check_servers():
server_info_list.append((server_name, server_host))
tasks.append(ping_server(server_host))
results = await asyncio.gather(*tasks)
results = await asyncio.gather(*tasks, return_exceptions=True)
offline_servers = []