gpt4 book ai didi

python - celery 任务和 Django 查询集缓存

转载 作者:行者123 更新时间:2023-11-29 02:24:24 38 4
gpt4 key购买 nike

我正在尝试让 celery 工作,但我遇到了一些我不太明白的问题。

我正在从第 3 方包中继承模型

class BaseModel(models.Model):
class Meta:
abstract = True

def do(self, a=1, b=2):
return a + b

然后;

from thirdpartypackage.models import BaseModel

class MyModel(BaseModel):
some_field = models.IntegerField(default=0)

@current_app.task(filter=task_method):
def do(self, a=1, b=1):
self.some_field = super(MyModel, self).do(a=a, b=b)
self.save()

现在每当我运行涉及数据库查询的任务时,例如:

def my_view(request, pk=None):
obj = get_object_or_404(MyModel, pk=pk)

obj.do.delay(a=2, b=4)

return HttpResponse('the answer is: {}'.format(obj.some_field))

我看到任务在 celery (花)中弹出,但实际的 http 响应不会更新结果,在我大量刷新后我看到结果更新,尽管这看起来不可靠。

奇怪的是,在真实的服务器上(在我的例子中是 Apache),这似乎并不能解决问题(刷新),尽管花说“成功”。当我进入 shell (python manage.py shell) 并直接调用该作业时,我确实立即看到了结果。

关于 django 的/mysql 缓存有什么我应该知道的吗?如何强制更新?

如果我直接调用该函数(没有延迟),它会按预期立即运行:

def my_view(request, pk=None):
obj = get_object_or_404(MyModel, pk=pk)

obj.do(a=2, b=4)

return HttpResponse('the answer is: {}'.format(obj.some_field))

最佳答案

您的数据库缓存没有问题。问题是您正在读取值并将其返回到 HttpResponse Celery 有机会运行它之前task.delay() 是一个异步调用,它创建一个作业并立即返回。实际工作需要由工作人员拿起并执行,这通常会发生一些处理延迟。

您可以使用各种方法解决这个问题,例如作业完成后,使用 Javascript 和 AJAX 更新前端。

关于python - celery 任务和 Django 查询集缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590991/

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