【问题标题】:How to put an api into celery task in django?如何在 django 中将 api 放入 celery 任务中?
【发布时间】: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 异步任务中。

标签: django django-rest-framework celery django-celery


【解决方案1】:

也许你可以这样做:

  1. GET/POST/etc 到达特定的端点

  2. 附加到 url 的视图已激活

  3. 在这里您可以启动/初始化 celery 任务并返回作业 id(需要对此 id 部分进行调查,我猜 celery 任务会同步返回一些 EagerResult 或其他内容/您可以实现自定义作业 id 功能)

  4. 用户获取特定请求的作业 ID

5 用户可以在延迟一段时间后使用该 ID 发出另一个请求

  1. 如果该 celery 任务已完成,则根据作业 ID 返回结果

这只是我最初想法的概述。很多想法,需要改进。

让我知道你的想法。

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 2017-09-10
    • 2019-08-21
    • 2012-05-19
    • 1970-01-01
    • 2013-05-14
    • 2018-11-13
    • 2016-08-13
    • 2014-03-16
    相关资源
    最近更新 更多