gpt4 book ai didi

python - CherryPy 缓存如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:49 26 4
gpt4 key购买 nike

我最近discovered CherryPy 中的页面对象属性在请求之间(以及客户端之间)是持久的。所以我想知道,将页面输出存储在这样的属性中是否有意义?像这样:

class Page:
def default(self, pagenumber):
if pagenumber not in self.validpages:
return 'Page number not found'
try:
html = self.pageoutput[pagenumber]
except KeyError:
html = self.formatter(self.dbcall(pagenumber))
return html
default.exposed = True

def formatter(self, data):
html = # Formatting code here
return html

def dbcall(self, pagenumber):
data = # Database lookup code here
return data

我知道 CherryPy caches GET requests默认情况下。在我的测试中,当对象属性是输出的一部分并且该属性发生更改时,CherryPy 会提供该属性的新值。这是否意味着输出仅被部分缓存?

对我来说,只要您每次更改数据库时都更新 self.pageoutput,这就会很有用。我能想象到的唯一困难是如果我想显示特定于用户的信息。你怎么看?

最佳答案

CherryPy 默认不缓存 GET 请求;您必须按照该文档中的描述显式打开缓存工具。

要回答您的第一个问题,是的,存储诸如“pageoutput”之类的在调用之间不会更改的内容是完全有效的。但是,有几点需要注意:

  1. HTTP 缓存比您自己编写的要好得多。所以更喜欢整个回复。
  2. 因此,对部分响应使用临时缓存,例如模板和横幅等。
  3. 在设计存储时要非常小心,以确保安全并发。参见 effbot's writeup关于那个主题的开始。一般来说,如果可行的话,尝试在应用程序启动时而不是在请求期间生成并存储这些值;如果您仅在启动时在主线程中写入此类数据,则每个请求的多个线程都应该可以安全地读取这些数据。如果您需要随着应用程序状态的进展而更改此类数据,您可能希望使用数据库或经过数百人年工作的其他机制来使其安全并发。

关于python - CherryPy 缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3908577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com