如何在服务器运行时使diff请求可以访问只读数据(apache,mod_python)

如何在服务器运行时使diff请求可以访问只读数据(apache,mod_python),python,apache,mod-python,Python,Apache,Mod Python,我正在使用Apache/2.2.8(Ubuntu)mod_python/3.3.1 python/2.5.2,我想预加载我使用的数据 目前,每次收到请求时,我都从磁盘上的文件中读取数据,然后解析它并将其存储在对象中。数据文件比较大,我想提前解析/预加载它 我想我可以1)在apache启动时加载内存中的数据(服务器运行时内存中会有大约100MB到500MB的数据),或者2)在提交第一个数据请求时加载数据,并将其保存在内存中,直到关闭服务器 下面是第二个想法的模型: from mod_python

我正在使用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

请分享您的意见和解决方案,

thx

您没有说明数据的格式,但是如果密钥库足够,那么您可以使用shelve和操作系统缓存,以便以预先准备好的格式保存数据。

您没有说明数据的格式,但是如果密钥库足够,那么您可以使用shelve和操作系统缓存,以便以预先准备好的格式保存数据。

另一个选项用于将数据保存在共享内存中,可供所有进程使用。

另一个选项用于将数据保存在共享内存中,可供所有进程使用。

您可以设置tmpfs(或ramfs)装载数据并将其保留在RAM中(tmpfs可能会发送数据进行交换)。

您可以设置tmpfs(或ramfs)装载数据并将其保留在RAM中(tmpfs可能会发送数据进行交换)。

我希望避免序列化,因为从磁盘读取数据时不会节省我很多时间(有很多与数据obj相关的元信息)。你能解释一下“以及操作系统缓存”是什么意思吗?shelve使用存储在磁盘上的密钥库,因此将由操作系统在磁盘缓存中保存相关部分。我会记住这一点,但我不希望为该项目多次执行磁盘IO,因为无法保证obj将被缓存,对吗?我希望避免序列化,因为这样做不会为我节省很多时间从磁盘读取数据(有很多与数据obj相关的元信息)。你能解释一下“以及操作系统缓存”是什么意思吗?shelve使用存储在磁盘上的密钥库,因此将由操作系统在磁盘缓存中保存相关部分。我将在将来记住这一点,但我不希望为该项目多次执行磁盘IO,因为无法保证obj将被缓存,对吗?请看一下Python中的延迟实例化:您对该程序有何疑问lazy init的模式,或者预缓存大块数据的机制,或者两者都有?您可能想要使用Python中的单线程模式进行多线程延迟实例化,不同的请求作为单独的线程运行吗?我确实需要一个好的预缓存机制,lazy init是一个好的模式,但具体来说,我需要一种存储cach的方法以跨不同会话的多个请求都可以访问的方式对obj进行初始化。会话等同于线程吗?看看Python中的惰性实例化:您的问题是关于lazy init的编程模式,还是关于预缓存大块数据的机制,还是两者都有?您可能希望使用Singleto进行多线程惰性实例化Python中的n模式是作为独立线程运行的不同请求吗?我确实需要一个好的预缓存机制,而lazy init是一个好的模式,但具体来说,我需要一种方法来存储缓存的obj,以便跨不同会话的多个请求可以访问它。会话是否等同于一个线程?