posts - 431,  comments - 344,  trackbacks - 0
公告
 Don't Repeat Yourself
座右铭:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
公告本博客在此声明部分文章为转摘,只做资料收集使用。


微信: szhourui
QQ:109450684
Email
lsi.zhourui@gmail.com
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

留言簿(15)

随笔分类(1019)

文章分类(3)

文章档案(21)

收藏夹

Link

好友博客

最新随笔

搜索

  •  

积分与排名

  • 积分 - 852411
  • 排名 - 47

最新评论

阅读排行榜

原文地址:http://groups.google.it/group/django-users/browse_thread/thread/4ba5652bcbd1f958/958c6e7733a26a9c?hl=it&lnk=gst&q=average+time&rnum=3#958c6e7733a26a9c

So, here is my version, using the cache backend:

from datetime import timedelta, datetime
from django.core.cache import cache
from django.contrib.sites.models import Site

ONLINE_MINUTES = 10
CACHE_KEY = '%s_online_user_ids' % Site.objects.get_current().domain

_last_purged = datetime.now()

def get_online_user_ids():
    user_dict = cache.get(CACHE_KEY)
    return hasattr(user_dict, 'keys') and user_dict.keys() or []

class OnlineUsers(object):
    def process_request(self, request):
        if request.user.is_anonymous():
            return

        user_dict = cache.get(CACHE_KEY)
        if not user_dict:
            # initialization
            user_dict = {}

        now = datetime.now()
        user_dict[request.user.id] = now

        # purge
        global _last_purged
        if _last_purged + timedelta(minutes=ONLINE_MINUTES) < now:
            purge_older_than = now - timedelta(minutes=ONLINE_MINUTES)
            for user_id, last_seen in user_dict.items():
                if last_seen < purge_older_than:
                    del(user_dict[user_id])
            _last_purged = now

        cache.set(CACHE_KEY, user_dict, 60*60*24)

This stores a dictionary in the form: {user_id: last_seen_time, ...}
in the cache and updates the cache once for every request by an
authenticated user.

An alternative would be to store a structure like Jeremy's,
{minute_seen: set(user_id, ...), ...} which I think will result in
nearly the same amount of cache hits on average.

I would like to hear your comments.

posted on 2009-07-08 08:41 周锐 阅读(742) 评论(1)  编辑  收藏 所属分类: Python

只有注册用户登录后才能发表评论。


网站导航: