gpt4 book ai didi

python - 如何提供包装同步 API 的异步 RESTful API

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:12 29 4
gpt4 key购买 nike

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

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

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

这看起来是解决这个问题的合理方法吗?我们应该查看哪些 python 库来使这类事情变得更容易?我们不确定是否要使用像 eventlet 或 twisted 这样的低级别的东西,或者像 celery 这样的更重一些的东西。 celery 似乎是这类东西的正常推荐,但我不是 100% 确定它的位置。

谢谢,斯宾塞

最佳答案

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

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

关于python - 如何提供包装同步 API 的异步 RESTful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601519/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com