Python - Хиты в минуту реализации? - PullRequest
2 голосов
/ 21 января 2009

Кажется, это такая тривиальная проблема, но я не могу понять, как я хочу это сделать. По сути, я хочу, чтобы я мог получать данные с сервера сокетов, который в любое время может дать количество пакетов, полученных за последнюю минуту. Как бы я это сделал?

Я думал о том, чтобы суммировать словарь, который использует текущую секунду в качестве ключа, и при получении пакета он увеличивает это значение на единицу, а также устанавливает второй ключ + 1 над ним на 0, но это только кажется неаккуратно. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 21 января 2009

Обычный способ решения этой проблемы на других языках - позволить измеряемой вещи просто увеличивать целое число. Затем вы оставляете это клиенту для прослушивания, чтобы определить интервалы и частоты.

Таким образом, вы в основном делаете , а не , чтобы сервер сокетов узнал о таких вещах, как «минуты», потому что эту функцию рассчитывает наблюдатель. Тогда вы также можете поддерживать несколько слушателей с разным разрешением интервала.

Полагаю, вы хотите, чтобы какая-то кольцевая буферная структура выполняла циклическое ведение журнала.

1 голос
/ 21 января 2009

Когда вы говорите последнюю минуту, вы имеете в виду точные последние секунды или последнюю полную минуту от x: 00 до x: 59? Последнее будет легче реализовать и, вероятно, даст точные результаты. У вас есть одна переменная prev, содержащая значение попаданий за предыдущую минуту. Тогда у вас есть текущее значение, которое увеличивается каждый раз, когда появляется новый удар. Вы возвращаете значение prev пользователям. При изменении минуты вы меняете предыдущее значение на текущее и сбрасываете текущее.

Если вам нужен более высокий анализ, вы можете разделить минуты на 2-6 срезов. Вам нужна переменная или запись в списке для каждого среза. Допустим, у вас есть 6 срезов по 10 секунд. У вас также есть индексная переменная, указывающая на текущий фрагмент (0..5). Для каждого удара вы увеличиваете временную переменную. Когда срез закончен, вы заменяете значение индексированной переменной на значение temp, сбрасываете temp и перемещаете индекс вперед. Вы возвращаете сумму переменных среза пользователям.

1 голос
/ 21 января 2009

Как бы то ни было, ваша реализация выше не будет работать, если вы не получаете пакет каждую секунду, так как следующая вторая запись не обязательно будет сброшена в 0.

В любом случае, «правильный» способ сделать это, анализ логов, заключается в том, чтобы вести ограниченную запись всех полученных вами запросов. Поэтому просто поместите запрос, полученное время и т. Д. В базу данных, и тогда простые запросы к базе данных дадут вам возможность использовать более минуты или любую минуту в прошлом. Не уверен, что это слишком тяжеловесно для тебя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...