2013-09-22 68 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

相关问题