我的Tornado Web服务器有以下用例:
在POST请求时,可以向服务器输入条目,这些条目不会持久保存到文件或数据库.在GET请求时,可以启动或终止进程.
因此,我需要在我的RequestHandler实现中的不同请求之间共享数据.这样做的正常方法是什么?
我有困难,将数据保存到self,例如self.entry = "...".在另一个请求中,数据不再存在.
我发现唯一可行的解决方案是将其存储在应用程序对象中:
application = web.Application([
(r'.*', MainHandler,
])
Run Code Online (Sandbox Code Playgroud)
和
def get(self):
# ...
self.application.entry = "..."
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?那么同步在这里,我的意思是这意味着访问共享数据.
Kon*_*che 15
我建议如下:代替数据库访问对象传递存储数据的对象,例如:
data = DataStore()
application = web.Application([
(r'.*', MainHandler, dict(data = data),
])
Run Code Online (Sandbox Code Playgroud)
使用以下RequestHandler初始化方法.
def initialize(self, data):
self.data = data
Run Code Online (Sandbox Code Playgroud)
您必须先创建对象并传递它,否则每次处理请求时都会重新创建它.
该文档提供了一种方法:
class MyHandler(RequestHandler):
def initialize(self, database):
self.database = database
def get(self, username):
...
mydatabase = dict()
app = Application([
(r'/user/(.*)', MyHandler, dict(database=mydatabase)),
])
Run Code Online (Sandbox Code Playgroud)
然后,您可以将对象保存mydatabase到文件中.
但我不确定这是实现请求之间同步所需的正确方法.