cache.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:ecs 作者: ecs-org 项目源码 文件源码
def cache_meeting_page(timeout=60*10, render_timeout=15):
    def _decorator(fn):
        @wraps(fn)
        def _inner(*args, **kwargs):
            meeting_pk = kwargs.pop('meeting_pk')
            # getting the meeting from the database is an implicit permission check
            meeting = get_object_or_404(Meeting, pk=meeting_pk)
            kwargs['meeting'] = meeting
            cache_key = cache_key_for_meeting_page(meeting, fn)
            lock_key = cache_key + ':render-lock'
            while True:
                html = cache.get(cache_key)
                if html is None:
                    if cache.add(lock_key, 'in-progress', render_timeout):
                        break
                    else:
                        time.sleep(1)
                else:
                    return HttpResponse(html)
            try:
                html = fn(*args, **kwargs)
                cache.set(cache_key, html, timeout)
                return HttpResponse(html)
            finally:
                cache.delete(lock_key)
        return _inner
    return _decorator
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号