Вот код, который должен продемонстрировать, что я пытаюсь сделать:
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 секунд. Есть идеи, как это реализовать?