【问题标题】:Setting class variables inside Tornado application在 Tornado 应用程序中设置类变量
【发布时间】:2012-08-31 03:32:34
【问题描述】:

我有一个 Tornado 应用程序,结构如下:

...

class Application(tornado.web.Application):
    def __init__(self):
        ...

class MyHandler(tornado.web.RequestHandler):
    def get():
        ...

class MyOtherHandler(tornado.web.RequestHandler):
    def post():
        ...

class MyClass(object):
    my_class_variable = {}
    ...

    def my_method_one():
        # access my_class_variable
        ...

    def my_method_two():
        # access my_class_variable
        ...

在其中,我的自定义类中有一个类变量my_class_variable。我想从MyClass 之外设置这个类变量,例如在其中一个处理程序内。因此我的问题是,在 Tornado 应用程序中直接在处理程序的方法中修改类变量是否是一种好习惯?例如

MyClass.my_class_variable[key] = value

【问题讨论】:

    标签: python tornado


    【解决方案1】:

    是的,没关系。处理程序通常需要以各种方式与其他类进行交互。

    【讨论】:

    • 谢谢!但是有没有这种设计不是最优的情况呢?
    • @skyork,当每个龙卷风实例的负载非常重(1000+ rps)时 - 复杂的类处理程序交互可能会对您造成不利影响。其他方式,这个方案一切都很好,不用担心。
    【解决方案2】:

    对我来说它看起来很“脏”...如果不知道具体问题很难分辨,但我会发现只需传递给 my_method_onemy_method_two 方法所需的任何参数,而不是然后设置一些类级别的属性。

    【讨论】:

    • 感谢您的回答。需要类变量,因为它为MyClass 的所有实例充当“全局/共享”变量。但是,我还需要从MyClass 外部通过处理程序根据用户的 POST 请求设置此类变量,因此我的问题在上面。您的建议似乎完全摆脱了“my_class_variable”,这可能不适合我的用例。
    • 如果方法只是修改类变量,那如何更干净?另见:stackoverflow.com/questions/3292631/…
    • @ColeMaclean 我建议完全删除类变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2017-11-14
    相关资源
    最近更新 更多