2014-06-12 17 views
0

最近,我发现,放置Python代码这条线以上WSGI - 是否应该将所有内容都放在“environ”行的下面,以便“全局”缓存任何内容?

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 

文本file.txt的内容实际上

cached 

在8个不同的线程。

WSGI脚本后,创建了8级不同的线程和缓存这8周不同的时间..它选择一个随机出8缓存的,因此,如果

/text-file.txt 

被修改,更新,甚至没有关系。等等..

的解决方案似乎是放置

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

的ENVIRON线就这样下:

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" 

我的意思基本上这整个事情将有

ENVIRON线

下得去

但如果我有这些例如在一个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 ? 

还是不要紧?

什么是创建最繁密的代码的方法?

+0

是的,Python模块被缓存。这是使用WSGI的重点,不必为每个请求重新运行新的Python解释器。 –

+0

@Martijn彼得斯,但它不只是模块。正在读取的文件的内容也被缓存。你在哪里听说过这个世界或这个宇宙中的一些概念? –

+0

@Martijn Pieters,你是否想说......“将文件路径提供给在environ行之上定义的类或函数”? –

回答

1

任何位于Python模块顶层的内容只会在模块导入时加载一次。 这是设计

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

然后,您如何根据请求构建数据,完全取决于您。使用函数来划分逻辑并使代码可重用,听起来像是个好主意。

+0

如果这个概念实际上是这样的话,相当于使用同一个篮子将洗过的袜子从洗碗机运送到阳台,然后将同一个篮子运送到其他地方并将其他物品运送到别的地方。 –

+0

我看到我看到..从洗碗机阳台的路径正在记忆,这里在wsgi和python它也被记住。缓存和记忆一样 –

+0

不,Python模块是一个机器人,你可以编程。 '应用程序'功能是处理携带洗衣篮的子程序。机器人需要有各种可以调用的程序,以及存储如何进入阳台的数据。每次你想洗衣服时,你都可以调用“应用程序”功能,但每次你不需要告诉机器人如何到达阳台,或者如何拿着篮子,或者如何清空篮子一旦到达。 –

相关问题