0

我有一个执行以下操作的应用程序:

  • 应用收到get请求后,会读取客户端的cookies进行识别。
  • 它将标识信息存储在 Postgresql DB 中
  • 它发送适当的响应并完成处理过程。

但是这样客户端也等着我把数据存入PSQL。我不想要这个 我想要的是:

  • 应用收到get请求后,会读取客户端的cookies进行识别。
  • 它发送适当的响应并完成处理过程。
  • 它将标识信息存储在 Postgresql DB 中。

在第二部分中,存储过程是在客户收到他的响应之后发生的,因此他不必等待它。我一直在寻找解决方案,但到目前为止还没有找到任何东西。我相信我使用错误的关键字进行搜索,因为我相信这是一个常见问题。

任何反馈表示赞赏。

4

2 回答 2

0

如果您不想等待 Postgres 响应,您可以尝试

1) 一个异步 postgres 驱动程序

2)将数据库作业放在一个队列上,让队列处理数据库写入。试试兔子 MQ

请记住,因为您在写入数据库之前返回给用户,所以您必须考虑如何处理写入错误

于 2013-09-23T16:11:27.093 回答
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

于 2013-09-28T06:51:40.077 回答