[英]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.