WSGI - 一切都应该低于"环境"行,以便没有任何缓存"全球"?

时间:2014-06-12 11:40:13

标签: python apache mod-wsgi wsgi python-2.6

最近我发现将python代码放在​​这一行

之上
def application(environ, start_response):

将导致事物被缓存在8个线程中。

基于我的apache错误日志文件..我一遍又一遍地重新加载我的wsgi脚本,并实现了8个线程(进程)由wsgi脚本创建。

换句话说,这个代码在下面..

import os
ooo = os.popen('/text-file.txt').read()

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    yield ooo

text-file.txt的内容实际上是

cached

在8个不同的主题中。

在wsgi脚本创建了8个不同的线程并缓存了8个不同的时间..它从8个缓存中随机选取一个,因此它甚至不重要

/text-file.txt

被修改,更新..等..

解决方案似乎正在放置

     ooo = os.popen('/text-file.txt').read()

在环境线下就像这样:

import os

def application(environ, start_response):
    ooo = os.popen('/text-file.txt').read()
    start_response('200 OK', [('content-type', 'text/html')])
    yield ooo

以上代码工作正常。

ooo = os.popen('/text-file.txt').read()

基于对文件的实时读取,并且在8个进程中8个不同时间没有任何缓存。

这里的问题是......

如果我喜欢太多行,例如

ooo = os.popen('/text-file.txt')
ooo2 = ooo.read()
ooo3 = "something"
ooo4 = "something else"

我的意思是基本上这整件事都必须在

之下

环境

但如果我在wsgi脚本中有40个这样的话怎么办?假设它们都是不同的东西,这就是它的样子......

import os

def application(environ, start_response):
        ooo = os.popen('/text-file.txt')
        ooo2 = ooo.read()
        ooo3 = "something"
        ooo4 = "something else"
    start_response('200 OK', [('content-type', 'text/html')])
    yield ooo

如果有太多这样的东西......它们都应该放在

之下
     def application(environ, start_response):

或者应该通过

调用它们
 functions ?

还是无所谓?

创建最出色代码的方法是什么?

1 个答案:

答案 0 :(得分:1)

导入模块时,Python模块顶层的任何内容都只加载一次。 这是设计

WSGI服务器每个进程导入一次模块,然后调用application方法来处理请求。如果每个请求的数据都需要“新鲜”,不要使用模块全局

您如何根据请求构建数据完全取决于您。使用函数对逻辑进行分区并使代码可重用,听起来像是个不错的主意。