Python 为什么字典有时是空的?(正在tornado.web.Application类实例中保存数据)
我试图在tornado中的请求之间传递一些数据。我有一个名为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
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等数据库。在Iserver之后,这就是问题所在。启动(0)
#自动检测核心数量并为每个核心派生一个进程。我使用的是1而不是0,它的工作方式与我预期的一样。
start(num_processes=1)