Skip to main content
 首页 » 编程设计

python之在 Django 中缓存来自其他网站的数据

2025年05月04日21cloudgamer

假设我有一个简单的 View 需要解析来自外部网站的数据。

现在看起来像这样:

def index(request): 
    source = urllib2.urlopen(EXTERNAL_WEBSITE_URL) 
    bs = BeautifulSoup.BeautifulSoup(source.read()) 
    finalList = [] # do whatever with bs to populate the list 
    return render_to_response('someTemplate.html', {'finalList': finalList}) 

首先,这是可以接受的用途吗?

显然,这在性能方面不是很好。外部网站页面很大,我只提取了其中的一小部分。我想到了两个解决方案:

  1. 异步执行所有这些操作。加载页面的其余部分,一旦我得到它就用数据填充。但我什至不知道从哪里开始。我刚刚开始使用 Django,直到现在才开始做任何异步操作。
  2. 我不关心此数据是否每 2-3 分钟更新一次,因此缓存也是一个很好的解决方案(也为我节省了额外的往返时间)。我将如何缓存这些数据?

请您参考如下方法:

首先,不要过早优化。让这个工作。

然后,添加足够的日志记录以查看性能问题(如果有的话)到底是什么。

您可能会发现最终用户的 PC 是最慢的部分;实际上,当您不获取 .JS 库、.CSS 和艺术品并在浏览器中呈现整个内容时,从另一个站点获取数据可能会非常快。

一旦您完全确定远程内容的获取确实是一个问题。真的。然后您必须执行以下操作。

  1. 编写一个“crontab”脚本,不时执行远程获取表单。

  2. 设计一个地方来缓存远程结果。数据库还是文件系统,二选一。

  3. 更新您的 Django 应用以从缓存(数据库或文件系统)而不是远程 URL 获取数据。

只有在你有绝对的证据证明远程站点的urllib2读取是瓶颈之后。