在Tornado类中传递全局变量

时间:2012-12-23 23:03:41

标签: python global-variables tornado

到目前为止,我一直将变量从一个Tornado类传递给另一个类,方法是将它们声明为global。我认为这可能不是理想的方式。以下是我的代码示例:

class MHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous

def get(self):
    self.render('index.html')

def post(self):
    global account_age

    age = self.get_argument('age')

    account_age = [age]


class AgeHandler(tornado.websocket.WebSocketHandler):    
@tornado.web.asynchronous
@gen.engine

def open(self):
    global account_age


    print 'Your account is overdue by: ', account_age

我想知道,在这个框架中是否有更合适的方式来共享变量。

我只做了几周的python和Tornado,所以请原谅我的无知。

由于

1 个答案:

答案 0 :(得分:3)

是的,我不会那样做。即使在这个简化的例子中,很明显你在POST和websocket开口之间有一个竞争条件。你如何保证发布POST的人是打开websocket的那个人?

我通常在全局列表/字典中保留对每个websocket连接的引用。某种参考,让我将服务器端输出写入正确的连接。