【问题标题】:Django as ORM - Perform update query asynchronously without blockingDjango as ORM - 异步执行更新查询而不阻塞
【发布时间】:2019-08-09 21:09:10
【问题描述】:

我使用 Djang 作为我的 ORM。 作为我的代码的一部分,我想发起一个更新请求

some_object = SomeObject.objects.get(...)
calculated_value = func(some_object.value1, some_object.value2)
some_object.value1 = calulated_value
# This line should happen asynchrnoously and I don't if it fails
some_object.save()  # Can be replaced with some_object.update(value=calculated_value)

# continue doing other stuff

line some_object.save() 有一些延迟,但实际上,我并不介意它是否失败,并且我不需要它的结果。我希望它由 Django 处理,而不需要其他代码等待它

【问题讨论】:

    标签: python django python-3.x orm


    【解决方案1】:

    您可以使用像 Celery 这样的异步任务队列。它需要一些设置,但对于执行计划的后台任务很有价值。

    from celery import shared_task
    
    @shared_task
    def set_calculated_value(object_id):
        some_object = SomeObject.objects.get(pk=object_id)
        calculated_value = func(some_object.value1, some_object.value2)
        some_object.value1 = calulated_value
        some_object.save()
    

    然后您将在视图/表单/模型方法中调用您的任务:

    from .tasks import set_calculated_value
    
    some_object = SomeObject.objects.get(...)
    set_calculated_value.delay(instance.pk)
    

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多