为什么字典有时是空的? (在tornado.web.Application类实例中保存数据)

时间:2014-01-20 15:06:59

标签: python dictionary tornado

我正在尝试在龙卷风中的请求之间传递一些数据。我有一个名为tcp_con的变量。

class Application( tornado.web.Application ):
    def __init__( self, **overrides ):
        handlers = [
            ( r"/", hd.MainHandler ),

            ]

        settings = { "cookie_secret": "thisismysecret",
                    "login_url": "/auth/login",
                    "template_path":  os.path.join( os.path.dirname( __file__ ), "templates" ),
                    "static_path": os.path.join( os.path.dirname( __file__ ), "static" ),
                    "xsrf_cookies": True
                    }

        # Initializing variables        
        self.debug = overrides['debug']
        self.__is_running_checks = False
        self.tcp_con = {}
        self.queue = Queue.Queue()

当使用提交表单时,我填写了一些变量,但当我刷新页面时tcp_con变量为空,如果我再次刷新,则字典再次包含数据,因此有时值是在字典中,有时不是。可能是什么问题?

这是请求手册的一部分:

@tornado.web.authenticated 
def get( self ):
    """
    """                    
    print self.application.tcp_con

1 个答案:

答案 0 :(得分:1)

您很可能在服务器上有多个龙卷风进程。每个进程都有自己的Application类。根据要求,您可以从不同的流程获得响应。因此,您无法使用此类来保存应用程序的状态。

来自龙卷风文档(class tornado.tcpserver.TCPServer):

start(num_processes=1)
  

在IOLoop中启动此服务器。

     

默认情况下,我们在此过程中运行服务器而不进行任何分叉   额外的子进程。

     

如果num_processes为None或< = 0,我们检测核心数   可以在这台机器和fork上运行多个子进程。如果   给出num_processes并且> 1,我们叉具体数量   子处理。

     

由于我们使用进程而不是线程,因此没有共享内存   在任何服务器代码之间。