最近我发现将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 ?
还是无所谓?
创建最出色代码的方法是什么?
答案 0 :(得分:1)
导入模块时,Python模块顶层的任何内容都只加载一次。 这是设计。
WSGI服务器每个进程导入一次模块,然后调用application
方法来处理请求。如果每个请求的数据都需要“新鲜”,不要使用模块全局。
您如何根据请求构建数据完全取决于您。使用函数对逻辑进行分区并使代码可重用,听起来像是个不错的主意。