2013-12-19 27 views
3

我有一个对象,它加载了来自DB Object_X的所有数据。防止在每个请求上创建昂贵的对象

该对象有几个定义的方法。我传递一些参数并根据参数I调用Object_X中的函数之一,它使用对象和参数中的预填充数据来获得一些结果。

我创建了一个Web服务,它调用Object_X中定义的任何方法并返回结果。

我的问题是,对于每次请求我一次又一次地从db加载所有的数据,这是很费时间的。有没有一种方法可以在启动服务器时加载一次数据,并为每个后续请求使用相同的对象?

+0

很有意思.. +1。 – aIKid

回答

0

我想你正在使用web.py框架工作。它将基于您如何使用web.py.对于最简单的方法,使用包括CherryPy的WSGI服务器,你可以试试这个:

import web 

urls = (
    '/', 'index' 
) 

def inc_num(): 
    cnt = 0 
    while True: 
     cnt += 1 
     yield cnt 


class index: 
    num = inc_num() 
    def GET(self): 
     return "Hello, world! %s" % self.num.next() 


if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 

每次当您访问

http://localhost:8080/ 

你会看到

的数量不断增加,每次你访问它。这意味着服务器记住状态,也意味着inc_num只能启动一次。

0

假设您的应用程序由长时间运行的进程提供服务(与普通CGI相反),并且您的数据库永远不会更新,您始终可以选择在模块的顶层实例化Object_X(使其成为全球),所以它只会在每个进程中创建一次。现在这意味着你在进程启动时会有一些开销,并且每次更新数据库时都必须重新启动所有进程。

真正的问题恕我直言,你为什么要从一开始就加载所有的数据库?如果这是“优化”,那么可能会有更好的工具和策略(更快的数据库,缓存等)。

相关问题