w_horn
@w_horn

Как ускорить производительность?

Добрый вечер. Есть функция, которая считывает данные с бд для топа и выводит (бот вк).

def vkGetFirstName(id):
	return vkapi.users.get(user_id=id)[0]['first_name']
def vkGetLastName(id):
	return vkapi.users.get(user_id=id)[0]['last_name']

def e_top(chatId):
	table.execute("""SELECT user_id, drop_count FROM vkbottable WHERE chat_id = '{}' ORDER BY drop_count DESC""".format(chatId))
	text = "Топ еб**ноидов:\n"
	for i, row in enumerate(table):
		text += "{}. {} {} - {} раз\n".format(i+1, vkGetFirstName(int(row[0])), vkGetLastName(int(row[0])), row[1])
	return text

print(e_top(2000000004))

Проблема в том, что это работает практически 13 секунд (12.6 в среднем). Можно ускорить этот кусок кода?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
text += "{}. {} {} - {} раз\n".format(i+1, vkGetFirstName(int(row[0])), vkGetLastName(int(row[0])), row[1])


Очевидно, имя и фамилия меняются не настолько часто, чтобы запрашивать их каждый раз при выводе топа.

Пишите их в БД или пакуйте запросы пачками в метод Execute, если очень нужно каждый раз запрашивать ИФ
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@o5a
users.get может принимать сразу массив user_ids, так что можно сразу получить данные всех пользователей, а не тягать каждого по 1 запросу (тем более, не тягать по 2 запроса на имя и фамилию в отдельности).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы