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

Python 为什么字典有时是空的?(正在tornado.web.Application类实例中保存数据),python,dictionary,tornado,Python,Dictionary,Tornado,我试图在tornado中的请求之间传递一些数据。我有一个名为tcp\u-con的变量 class Application( tornado.web.Application ): def __init__( self, **overrides ): handlers = [ ( r"/", hd.MainHandler ), ] settings = { "cookie_secret": "thisismy

我试图在tornado中的请求之间传递一些数据。我有一个名为
tcp\u-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\u con
变量为空,如果我再次刷新,则字典再次包含数据,因此有时值在字典中,有时不在字典中。有什么问题吗

这是请求手册的一部分:

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

很可能服务器上有多个tornado进程。每个进程都有自己的
应用程序
类。根据请求,您可以从不同的进程获得响应。所以,您不能使用此类来保存应用程序的状态

来自tornado文档():

在IOLoop中启动此服务器

默认情况下,我们在这个过程中运行服务器,并且不分叉任何分支 附加子进程

如果num_进程为None或1,则我们分叉特定数量的进程 子进程

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


你不是应该用
处理程序
设置
做点什么吗?我还尝试用全局变量替换,结果是一样的。@运行如果你确实有多个进程,你就不能用全局变量在它们之间共享数据。每个过程都有自己的环境。您可以尝试文件、memcached、redis或其他方式……不,队列也是进程内的数据结构,因此它不会在进程之间共享。使用Redis、MongoDB等数据库。在I
server之后,这就是问题所在。启动(0)
#自动检测核心数量并为每个核心派生一个进程。我使用的是1而不是0,它的工作方式与我预期的一样。
start(num_processes=1)