Я пытаюсь заставить сельдерей работать, но у меня есть некоторые проблемы, которые я не совсем понимаю.Задача celery и django queryset cache
Я наследуя модель из пакета 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))
Я вижу задачу всплывают в сельдерее (цветок), но фактический ответ HTTP не обновлять результат, после того, как я сильно обновляюсь, я вижу обновление результата, хотя это кажется ненадежным.
Незнакомец, поэтому на реальном сервере (apache в моем случае) это не похоже на трюк (освежающий), хотя цветок говорит «успех». Когда я перехожу в оболочку (оболочка python manage.py) и сразу вызываю задание, я сразу вижу результат.
Есть ли что-нибудь о кэшировании 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
Будьте осторожны с интерпретацией результатов, говорящих, что работа ** закончена * *. По умолчанию задачи ** немедленно подтверждаются **, когда выскочили из очереди, если вы явно не указали, что они являются идемпотентными, включив переключатель 'acks_late'. Подробнее здесь: http://celery.readthedocs.org/ru/latest/userguide/tasks.html –