如何在 django 中将 api 放入 celery 任务中?
Posted
技术标签:
【中文标题】如何在 django 中将 api 放入 celery 任务中?【英文标题】:How to put an api into celery task in django? 【发布时间】:2019-01-07 14:54:43 【问题描述】:我将 Django、celery 和 DjangoRestFramework 用于 API。 我有一个 API 需要大约 1 分钟才能以 JSON 格式显示数据。问题是 Heroku(服务器)如果一个函数需要超过 30 秒就会显示应用程序错误。因此,我想将我的 API 放入 celery 任务中。 请建议这样做的方法。
【问题讨论】:
你的意思是你向一个端点发出请求,然后那个端点进行内部处理,然后返回给你数据? 可能需要尝试重构代码?你试过了吗? @Umair 我想要任务文件中的整个 API,而不是 celery 任务中的部分 API。 Celery 适用于asynchronous
任务,而 REST-API 适用于 synchronous
@JerinPeterGeorge,是的,你是对的,但问题是当异步任务耗时超过 30 秒时,Heroku 服务器开始显示应用程序错误,我该怎么办。这就是为什么我想把整个 API 放在 celery 异步任务中。
【参考方案1】:
也许你可以这样做:
GET/POST/etc 到达特定的端点
附加到 url 的视图已激活
在这里您可以启动/初始化 celery 任务并返回作业 id(需要对此 id 部分进行调查,我猜 celery 任务会同步返回一些 EagerResult 或其他内容/您可以实现自定义作业 id 功能)
用户获取特定请求的作业 ID
5 用户可以在延迟一段时间后使用该 ID 发出另一个请求
-
如果该 celery 任务已完成,则根据作业 ID 返回结果
这只是我最初想法的概述。很多想法,需要改进。
让我知道你的想法。
【讨论】:
以上是关于如何在 django 中将 api 放入 celery 任务中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django RestFramework API 中将 manytomanyfield 作为对象返回
如何从 Scala Json 字符串中将 Json 放入 JS 变量中?
如何在 django 中将 blob url 转换为 mp3 音频
如何在 Django 中将 Http Post 参数的 Json 值转换为 Python 字典?