【问题标题】:Exactly how long do Django/Python/FastCGI Processes last?Django/Python/FastCGI 进程到底能持续多久?
【发布时间】:2011-10-12 05:08:52
【问题描述】:

我一直在使用 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 文件中的数据。例如,我将从单独的文件中加载大的 sn-ps 代码,而不是将它们留在模板中(它们使它们混乱)或数据库(编辑它们不方便)。知道这个过程是持久的,我通过将我加载到静态字典中的文本保存在我的一个类中来创建一个临时内存缓存:

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

这大大加快了一切速度,因为我从文件系统中一一加载的两打左右的 code-sn-ps 现在直接从进程的内存中获取。每次我强制重启时,一个请求会很慢,而缓存已满,然后又变得异常快。

我的问题是,究竟是什么决定了进程如何/何时重新启动、类和模块重新加载以及我保留在静态字典中的数据被清除?它是否依赖于我安装的 Python、Django、Apache 或 FastCGI?它是基于时间、请求数量、负载还是伪随机的确定性的?进行这种内存缓存是否安全(这真的非常简单方便!),还是我应该研究一些缓存这些文件读取的正确方法?

【问题讨论】:

    标签: python django apache fastcgi


    【解决方案1】:
    【解决方案2】:

    听起来你已经知道了。

    1. 当您编辑 Python 文件时。
    2. 重新启动服务器时。
    3. 出现不可恢复的错误时。 也称为“仅在必要时”。

    这样的缓存很好 - 每当您将任何内容存储在变量中时,您都会这样做。既然信息是只读的,这怎么可能不安全呢?重新启动服务器后,不要立即将更改写入文件;但可能发生的最糟糕的事情是一个页面视图被搞砸了。

    有一个简单的方法可以确认这一切——记录。在调用装饰器时记录它们,并在必须从磁盘加载文件时记录。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多