2

我们正在 Django 中创建一个 Web 服务(RESTful API)。我们的 API 将包装我们自己的内部数据以及我们的 Web 服务层将访问的其他一些 API。

我们使用的其中一个 API 有一些长时间运行的调用,它们在大约一分钟内不返回 HTTP 响应。API 有一个单独的 API 调用来获取当前操作的状态,但这意味着用户必须启动长时间运行的操作,然后有一个单独的进程轮询状态。我们不希望我们的 API 以这种方式工作,我们希望初始请求只返回一个表示它正在进行的响应。

所以我们想要做的是当我们得到一个长时间运行的请求时,我们异步地向 API 发起一个我们自己的 HTTP 请求,然后返回一个响应。然后每次我们得到一个状态调查,我们只是通过它并用我们得到的响应来响应。当我们收到操作完成的回调时,下次我们收到状态轮询时,我们将响应操作完成并返回数据。这意味着我们需要处理传入状态请求的处理程序,以检查正在进行的长时间运行的请求列表以响应状态。

这似乎是解决这个问题的合理方法吗?我们应该研究哪些 python 库来使这种事情变得更容易?我们不确定是使用像 eventlet 或 twisted 这样的低级别的东西,还是像芹菜这样重量更重的东西。芹菜似乎是这类东西的正常推荐,但我不能 100% 确定它的位置。

谢谢,斯宾塞

4

1 回答 1

0

几个月前我遇到了同样的情况,可能你已经解决了你的问题,但是对于面临同样情况的其他人,我会发布我当时所做的事情。

基本上我使用了http://www.celeryproject.org/库,以异步方式调度一个长时间运行的操作,返回成功的 HTTP 响应芹菜作业 ID,异步操作将在 sqlite 数据库中注册状态和作业 ID(对我正在做的事情来说已经足够了),并且一个客户正在查询(使用休息)工作的状态。

于 2016-11-28T21:48:54.390 回答