2017-03-17 87 views
0

我正在使用web.py来托管一个简单的web服务。 Web服务在后端(ClassA内部)运行分析应用程序。在web.py的初始化过程中,我想将所有数据预加载到内存中(例如,当Web服务器启动时只调用一次= ClassA()),并且当用户发送Web请求时,Web服务器只会响应预先计算的结果(即返回a.do_something)。在webpy上只初始化python类一次

下面的代码似乎在每次收到HTTP POST请求时运行init()类。这是浪费时间,因为初始化阶段需要很长时间。是否有可能只初始化ClassA一次?

import web 
from aclass import ClassA 

urls = (  
    '/add', 'add' 
) 

class add: 
    def __init__(self): 
     a = ClassA() 

    def POST(self): 
     return a.do_something() 

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

回答

2

尝试:

class add: 
    a = ClassA() 

    def POST(self): 
     return add.a.do_something() 

这将使其成为一流的绑定参数,而不是一个实例绑定一个,即只初始化一次。

+0

工作,但不''self.a.do_something()'比'add.a.do_something()'更好?无论哪种方式,初始化只发生一次。 – pbuck

+0

我不能判断哪一个更好,我只是想强调一下,它是绑定到类,而不是实例。 (我可以看到的一个优点是,使用'self'你可以在不破坏函数的情况下重命名类。) – Pit