我一直在Django的一个网站上工作,使用一个自动安装程序和一个自定义模板系统设置FCGI。在
正如我现在设置的,每个视图都是一个类的实例,它在加载时绑定到模板文件,而不是在执行时绑定到模板文件。也就是说,类通过修饰符绑定到模板:
@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,方法是将加载到静态字典中的文本保存在我的一个类中:
^{pr2}$这大大加快了速度,因为我从文件系统一个接一个地加载的二十多个代码片段现在直接从进程的内存中获取。每次我强制重新启动时,对于一个请求它都会很慢,而缓存已满,然后又会变得很快。在
我的问题是,究竟是什么决定了进程如何/何时重新启动,类和模块被重新加载,以及我在静态字典中保存的数据被清除?它依赖于我安装的Python、Django、Apache或FastCGI吗?它是确定性的、基于时间的、基于请求数的、加载的还是伪随机的?做这种内存缓存是否安全(这真的非常简单和方便!),还是应该研究一些适当的方法来缓存这些文件读取?在
除了already mentioned reasons,Apache还可以配置to terminate idle fcgi processes after a specified timespan。在
听起来你已经知道了。在
像这样的缓存是很好的,当你在变量中存储任何内容时,你都可以这样做。既然信息是只读的,这怎么可能不安全呢?最坏的情况是在服务器重新启动后,你可能会写不好页面。在
有一个简单的方法来确认所有这些日志记录。当您的装饰器被调用时,让他们进行日志记录,当您必须从磁盘加载一个文件时记录。在
相关问题 更多 >
编程相关推荐