2013-09-22 105 views
0

我有做如下操作的應用:應用程序接收到一個GET請求如何在處理請求後向數據庫發送查詢?

  • 後,識別讀取客戶端的cookie 。
  • 它將標識信息存儲在Postgresql DB中
  • 併發送相應的響應並結束處理 進程。

但是這樣客戶端也在等待我將數據存儲在PSQL中。我不」 不想這個,我想要的是:應用程序接收到一個GET請求

  • 後,識別讀取客戶端的cookie 。
  • 它發送適當的響應並完成處理過程。
  • 它將標識信息存儲在Postgresql DB中。

在第二部分存儲過程發生在客戶端收到他的迴應後,因此他不必等待它。我尋找了一個解決方案,但到目前爲止還沒有發現任何東西。我相信我在用錯誤的關鍵字搜索,因爲我相信這是一個常見問題。

任何反饋意見。

回答

0

您應該添加一個回調到ioloop數據庫之前返回給用戶。通過一些像這樣的代碼:

from tornado import ioloop 

def somefuction(*args): 
    # call the DB 

... 
... now in your get() or post() handler 
... 

io_loop = ioloop.IOLoop.instance() 
io_loop.add_callback(partial(somefunction, arg, arg2)) 

... rest of your handler ... 
self.finish() 

這反應是通過事件處理程序返回給用戶的下一個迭代之後打電話給你的DB處理器somefunction將被調用。

+0

完美答案我正在考慮使用self.finish()後的數據庫調用,但這更優雅 – user2662020

0

如果你不想等待Postgres的迴應,你可以嘗試

1)async postgres driver

2)放在一個隊列中的DB工作,讓隊列處理DB寫入。嘗試Rabbit MQ

記住,因爲你,你寫你必須考慮如何處理寫入錯誤

+0

我正在使用momoko作爲異步postgres驅動程序 我存儲的信息就像用戶ID,用戶代理,遠程IP等,所以它並不重要。我決定在完成響應後發送查詢self.finish() – user2662020

相關問題