我有一个加载来自DB Object_X
的所有数据的对象。
此对象定义了一些方法。我传递了一些参数,并根据参数I调用Object_X
中的一个函数,它使用对象和参数中预先填充的数据来获得一些结果。
我创建了一个Web服务,它调用Object_X
中定义的任何方法并返回结果。
我的问题是,对于每个请求,我一次又一次地从db加载所有数据,这非常耗时。当我启动服务器并为每个后续请求使用相同的对象时,有没有一种方法可以加载数据?
答案 0 :(得分: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/
你会看到
Hello, world! 1
Hello, world! 2
...
每次访问时,这个数字会不断增加。这意味着服务器记住状态,也意味着inc_num只启动一次。
答案 1 :(得分:0)
假设您的应用程序由长时间运行的进程提供服务(而不是像普通CGI那样),并且您的数据库永远不会更新,您始终可以选择在模块的顶层实例化Object_X
(使它成为一个全局的,所以每个进程只会创建一次。现在,这意味着您将在进程启动时遇到一些开销,并且每次更新数据库时都必须重新启动所有进程。
真正的问题恕我直言,为什么你想从一开始就加载你的所有数据库?如果那是“优化”那么可能有更好的工具和策略(更快的数据库,缓存等)。