2

迄今为止,我一直通过将变量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 几个星期,所以请原谅我的无知。

谢谢

4

1 回答 1

3

是的,我不会那样做。即使在这个简化的示例中,很明显您在 POST 和 websocket 打开之间存在竞争条件。你怎么能保证发出 POST 的人就是打开 websocket 的人呢?

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

于 2012-12-23T23:32:42.890 回答