2
我想讓芹菜工作,但我有一些問題,我不太明白。芹菜任務和Django查詢集緩存
我從第三方軟件包
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))
我看到任務芹菜(花)彈出,但實際的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))
雖然有效你的觀點似乎並沒有引起問題。我看到工作幾乎立即完成(芹菜花),正如我所覆蓋的,刷新似乎沒有幫助的Apache網絡服務器,但謝謝我將進一步調查 – user2298943 2014-08-31 14:21:37
小心解釋結果說工作**完成* *。默認情況下,當彈出隊列時,任務將立即被**確認**,除非通過設置'acks_late'開關明確指定它們是冪等的。在這裏閱讀更多信息:http://celery.readthedocs.org/en/latest/userguide/tasks.html – 2014-08-31 15:14:48