首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从芹菜工人到数据库存储结果与返回结果

从芹菜工人到数据库存储结果与返回结果
EN

Stack Overflow用户
提问于 2017-04-13 00:00:37
回答 1查看 2.5K关注 0票数 2

我使用芹菜w/ Django来处理某个任务,该任务返回需要放入模型记录中的JSON值。现在,我看到了将它保存在Django数据库中的两个选项:

  1. 作为任务签名的一部分传入记录的id。然后芹菜可以用它来update记录。
  2. 或者,我可以返回任务的结果,并启用芹菜的django-db结果后端,该后端将位于芹菜自己的task_result表中。这意味着我必须在记录中持久化AsyncResult Id,每当客户端请求记录时,我将查找并查看进程是否已经完成。

在我看来,选择1似乎更好,但由于我最近几年没有与芹菜合作,我想知道它是否有缺点,和/或哪种情况更适合选择2。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-04-13 05:01:57

不,第一种方法没有什么问题。

tasks.py从app.models导入your_model从芹菜进口任务

代码语言:javascript
运行
复制
@task
def update_model(id):
    model_obj = your_model.objects.get(id=id)
    #do your stuffs here...

views.py

代码语言:javascript
运行
复制
from app.tasks import update_model

def your_view(request):
    #your code
    update_model.delay(id_of_the_instance_you_want_to_update)

可以将此示例代码用于数据库中的原子提交。如果你担心。(取自芹菜文档)

代码语言:javascript
运行
复制
from functools import partial
from django.db import transaction

from .models import Article, Log
from .tasks import send_article_created_notification

def create_article(request):
    with transaction.atomic():
        article = Article.objects.create(**request.POST)
        # send this task only if the rest of the transaction succeeds.
        transaction.on_commit(partial(
            send_article_created_notification.delay, article_id=article.pk))
        Log.objects.create(type=Log.ARTICLE_CREATED, object_pk=article.pk)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43381473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档