我一直在Django的网站上工作,使用FCGI使用自动安装程序和自定义模板系统进行设置。Django/Python/FastCGI进程持续多久?
正如我现在设置的那样,每个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的安装?它是基于时间,请求数量,负载或伪随机确定性的吗?做这种内存中缓存(这真的很容易和方便!)是安全的,还是应该研究一些正确的缓存这些文件读取的方法?