【问题标题】:Initialize a python class only once on webpy在 webpy 上只初始化一次 python 类
【发布时间】:2023-03-19 09:57:02
【问题描述】:

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

每次收到 HTTP POST 请求时,下面的代码似乎都会运行类 'add' 的 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()

【问题讨论】:

    标签: python python-2.7 web.py


    【解决方案1】:

    试试:

    class add:
        a = ClassA()
    
        def POST(self):
            return add.a.do_something()
    

    这将使它成为类绑定参数而不是实例绑定参数,即只初始化一次。

    【讨论】:

    • 有效,但self.a.do_something() 不会比add.a.do_something() 更好吗?无论哪种方式,初始化只发生一次。
    • 我无法判断哪个更好,我只是想强调一点,它绑定到类,而不是实例。 (我可以看到的一个优点是,使用 self 您可以重命名类而不会破坏函数。)
    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多