【发布时间】:2009-12-24 07:03:21
【问题描述】:
我正在使用 Apache/2.2.8 (Ubuntu) mod_python/3.3.1 Python/2.5.2,我想预加载我使用的数据。
目前我每次收到请求时都会从磁盘上的文件中读取数据,然后对其进行解析并将其存储在一个对象中。数据文件比较大,我想提前解析/预加载。
我在想我可以 1)在 apache 启动时将数据加载到内存中(服务器运行时大约 100MB 到 500MB 的数据将驻留在内存中),或者我可以 2)在提交第一个数据请求时加载它并将其保存在内存中,直到我关闭服务器。
下面是第二个想法的模型:
from mod_python import apache
from mod_python import Session
gvar = 0
def handler(req):
req.content_type = 'text/plain'
session = Session.Session(req)
if session.is_new():
global gvar
req.write('gvar was originally : '+str(gvar))
gvar = 314
session['addr'] = req.connection.remote_ip
session.save()
req.write('\ngvar was just set to: '+str(gvar))
else:
global gvar
req.write('gvar set to: '+str(gvar))
return apache.OK
输出(第一节):
gvar 最初是:0
gvar 刚刚设置为:314
输出(会话 > 1):
gvar 设置为:314
请分享您的 cmets 和解决方案, 谢谢
【问题讨论】:
-
看看 Python 中的惰性实例化:en.wikipedia.org/wiki/Lazy_initialization#Python
-
您的问题是关于惰性初始化的编程模式,还是预缓存大块数据的机制,或两者兼而有之?
-
您可能希望在 Python 中使用单例模式进行多线程惰性实例化 en.wikipedia.org/wiki/Singleton_pattern#Python 不同的请求是否作为单独的线程运行?
-
我确实需要一个好的预缓存机制,而惰性初始化是一个很好的模式,但具体来说,我需要一种方法来存储缓存的 obj,以便跨 diff 会话的多个请求可以访问它。
-
会话是否等同于线程?
标签: python apache mod-python