我一直在使用Django的网站,使用自动安装程序和自定义模板系统设置FCGI。
正如我现在设置的那样,每个View都是一个类的实例,它在加载时绑定到模板文件 ,而不是执行时间。也就是说,类通过装饰器绑定到模板:
@include("page/page.xtag") # bind template to view class
class Page (Base):
def main(self): # main end-point to retrieve web page
blah = get_some_stuff()
return self.template.main(data=blah) # evaluates template using some data
我注意到的一件事是,由于FCGI没有创建新进程并且每次请求都重新加载所有模块/类,因此对模板的更改不会自动出现在网站上,直到我强制重启(即通过编辑/保存python文件)。
网页还包含大量存储在文件系统中的.txt文件中的数据。例如,我将从单独的文件加载大的代码片段,而不是将它们留在模板中(它们混乱的地方)或数据库中(编辑它们不方便)。知道这个过程是持久的,我通过在我的一个类中保存加载到静态字典中的文本来创建一个特殊的memcache:
class XLoad:
rawCache = {} #{name : (time, text)}
@staticmethod
def loadRaw(source):
latestTime = os.stat(source).st_mtime
if source in XLoad.rawCache.keys() and latestTime < XLoad.rawCache[source][0]:
# if the cached version of file is up to date, use it
return XLoad.rawCache[source][1]
else:
# otherwise read it from disk, dump it in cache and use that
text = open(source).read()
XLoad.rawCache[source] = (latestTime, text)
return text
这大大加快了一切,因为我从文件系统逐个加载的二十几个代码片段现在直接从进程的内存中获取。每次我强制重启时,一个请求的速度都会很慢,而缓存填满后会再次变得非常快。
我的问题是,究竟是什么决定了进程重启的时间/时间,重新加载了类和模块,以及我保存在静态字典中的数据被清除了?它依赖于我的Python,Django,Apache或FastCGI的安装吗?它是基于时间,请求数量,负载数量还是伪随机数的确定性?这种内存缓存是否安全(这非常简单方便!),或者我应该研究一些缓存这些文件读取的正确方法吗?
答案 0 :(得分:1)
听起来你已经知道了这一点。
有一种简单的方法可以确认所有这些 - 记录。让装饰者在调用时记录,并在必须从磁盘加载文件时进行记录。
答案 1 :(得分:0)