Как я могу сохранить список недавно увиденных пользователей без нехватки ОЗУ / сбоя моей БД? - PullRequest
0 голосов
/ 14 февраля 2011

Вот код, который должен продемонстрировать, что я пытаюсь сделать:

current_time  = datetime.datetime.now()
recently_seen = []

user_id = 10

while True:
    if user_id not in recently_seen:
        recently_seen[user_id] = current_time

        print 'seen {0}'.format(user_id)
    else:
        if current_time - recently_seen[user_id] > '5 seconds':
            recently_seen[user_id] = current_time

            print 'seen {0}'.format(user_id)

    time.sleep(0.1)

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

То, что я пытаюсь сделать, это регистрировать пользователей, которых он видит и в какое время. Сказать, что он видел пользователя в 0,1 секунды, а затем снова в 0,7 секунды, глупо. Поэтому я хочу реализовать 5-секундный буфер.

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

У меня есть два решения:

1) Сохраните user_id в словаре (аналогично приведенному выше примеру кода) и проверьте это. Проблема в том, что если он работает в течение нескольких дней и продолжает находить новых пользователей, это в конечном итоге израсходует мою оперативную память 2) Зарегистрируйте их в базе данных и проверьте. Проблема в том, что он находит пользователей каждые несколько миллисекунд. Я не хочу читать базу данных каждые несколько миллисекунд ...

Мне нужен какой-то способ создания списка ограниченного размера. Это ограничение будет 5 секунд. Есть идеи, как это реализовать?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Почему вы не используете DBM ?Он будет работать как словарь, но будет храниться на диске.

0 голосов
/ 14 февраля 2011

Как насчет удаления пользователя из вашего словаря, когда вы регистрируете его в базе данных?

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