Python - реализация ударов в минуту?

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
294
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Вот как Linux обрабатывает отчетный трафик, мне это кажется вполне разумным.

David 21.01.2009 10:50

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

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

Ответ принят как подходящий

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

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

Другие вопросы по теме