![](/img/trans.png)
[英]How to use multiple ioloop in tornado and share data between the ioloop(s)?
[英]How to share data between requests in Tornado Web
我的Tornado Web服务器有以下用例:
在POST请求时,可以向服务器输入条目,这些条目不会持久保存到文件或数据库。 在GET请求时,可以启动或终止进程。
因此,我需要在RequestHandler
实现中的不同请求之间共享数据。 这样做的正常方法是什么?
我在将数据保存到self
遇到了困难,例如self.entry = "..."
。 在另一个请求中,数据不再存在。
我发现唯一可行的解决方案是将其存储在应用程序对象中:
application = web.Application([
(r'.*', MainHandler,
])
和
def get(self):
# ...
self.application.entry = "..."
这是正确的方法吗? 那么同步在这里,我的意思是这意味着访问共享数据。
我建议如下:代替数据库访问对象传递存储数据的对象,例如:
data = DataStore()
application = web.Application([
(r'.*', MainHandler, dict(data = data),
])
使用以下RequestHandler
初始化方法。
def initialize(self, data):
self.data = data
您必须先创建对象并传递它,否则每次处理请求时都会重新创建它。
该文档提供了一种方法:
class MyHandler(RequestHandler):
def initialize(self, database):
self.database = database
def get(self, username):
...
mydatabase = dict()
app = Application([
(r'/user/(.*)', MyHandler, dict(database=mydatabase)),
])
然后,您可以将对象mydatabase
保存到文件中。
但我不确定这是实现请求之间同步所需的正确方法。
你可以使用memcached
的东西。 但是,您需要设置memcached服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.