Списки событий в Python - PullRequest
       3

Списки событий в Python

3 голосов
/ 11 августа 2011

Я ищу эффективный способ решения конкретной проблемы в Python.У меня есть поток событий, прибывающих каждое со связанной отметкой времени.Концептуально я добавляю эти события в конец упорядоченного по времени списка и выполняю их обработку, внося некоторые изменения в различные значения и средние значения (в зависимости от типа события).Время события истекает через 15 минут, когда я удаляю событие в начале списка и вносю соответствующие корректировки в мои подсчеты и средние значения.Класс deque в модуле коллекций действительно подходит для этого.

Теперь к проблеме, я хочу расширить эту идею, но также сохранить счетчики и средние значения для событий за последние 5 и 1 минутные периоды.Насколько я понимаю, я не могу эффективно тайм-аутить события в эти периоды, используя одну деку.Я мог бы сохранить пару индексов в очереди следующих событий, которые должны быть установлены по тайм-ауту на границах 5 минут и 1 минута, но, как я понимаю, индексация в deque - это операция O (n).Я также мог бы использовать 3 отдельных запроса, по одному на каждый период времени с событиями (или ссылками на события), дублированными в каждом списке.Это просто ужасно.

Решение, с которым я играю, заключается в использовании связанного списка, но это кажется довольно низким уровнем для Python;Я не думаю, что Python предоставляет структуру связанного списка, поэтому мне нужно написать свою собственную.Есть некоторые дополнительные ограничения в том, что существует большое количество событий, а память довольно ограничена.Буду признателен за любые другие предложения или идеи о том, как я могу решить эту проблему.

1 Ответ

2 голосов
/ 11 августа 2011

Вы можете использовать три запроса, но вот так:

  • исходный с интервалом в 1 минуту (вместо 15)
  • другой на 5 минут будет получать события отпредыдущий deque
  • еще один в течение 15 минут будет получать события из предыдущего deque.

Таким образом, дублирование и индексация не требуются.И это тоже можно продлить.

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