You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django集成PRAW调用Reddit API时lru_cache导致可迭代数据不显示问题

问题原因

  • 核心原因是redditor.submissions.top(limit=10)返回的是PRAW提供的惰性生成器对象,这类对象仅支持一次遍历:第一次页面渲染时生成器的内容已经被全部读取耗尽,缓存中存储的是已经为空的生成器,后续从缓存读取时自然遍历不到任何内容。
  • 次要注意点:lru_cache装饰实例方法时会将self纳入缓存键计算,如果你后续会创建多个Reddit类实例,会导致缓存重复占用空间,不过你当前代码是全局单例实例化,该问题暂时不会触发。

修复方案

只需要修改reddit.py中details方法的返回逻辑,主动把生成器转为列表,将实际数据存入缓存即可:

from functools import lru_cache
import praw

CLIENT_ID = "你的客户端ID"
CLIENT_SECRET = "你的客户端密钥"
USER_AGENT = "你的UA"

class Reddit:
    def __init__(self):
        self.praw = praw.Reddit(
            client_id = CLIENT_ID,
            client_secret = CLIENT_SECRET,
            user_agent = USER_AGENT
        )

     @lru_cache(maxsize = 256)
     def details(self, redditor):
        redditor = self.praw.redditor(redditor)

        overview = {
            'name': redditor.name,
            'comment_karma': redditor.comment_karma,
            # 把生成器转成列表,实际数据会被缓存
            'top_submissions': list(redditor.submissions.top(limit=10)),
        }
        return overview

修改后同一个redditor参数再次调用方法时,会直接返回缓存中的列表数据,不会重复发起API请求,同时列表支持多次遍历,模板渲染也不会出现无数据的问题。

内容的提问来源于stack exchange,提问作者user16751857

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:06:01