Это мой первый опыт изучения сельдерея и джанго. Я установил последнюю версию сельдерея (celery==3.1.17
) и rabbitmq (amqp==1.4.6
) внутри моего виртуального. Я учусь от celery's website.Проблемы с пониманием сельдерея
models.py:
from django.db import models
# Create your models here.
class Count(models.Model):
x = models.IntegerField()
def __unicode__(self):
return self.x
views.py:
def home(request):
if request.POST:
form = CountForm(request.POST)
if form.is_valid():
if form.cleaned_data:
count = form.save()
count.x = add.delay(count.x)
return HttpResponseRedirect('/')
else:
all_counts = Count.objects.all()
form = CountForm()
return render(request, 'home.html',{
'form':form,
'all_counts':all_counts
})
шаблона:
<body>
<form method="post" action=".">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="post">
</form>
{% if all_counts.count > 0 %}
{% for count in all_counts %}
<p>ID {{count.id}} = :: Value = {{count.x}}</p>
<br/>
{% endfor %}
{% else %}
<p>No counts</p>
{% endif %}
</body>
Update
tasks.py:
@app.task
def add(x):
while x <= 50:
return x + 1
time.sleep(3)
Что я хочу выполнять через сельдерей, чтобы добавить й граф, пока она не равна 50, так что каждое вычисление и значение результата будет храниться асинхронно. Следовательно, через каждые 3 секунды я должен увидеть значение count.x, изменяя асинхронно, до значения 50. Но в шаблоне я получаю то же значение, что и я. Что мне не хватает? Пожалуйста, помогите мне понять. Спасибо.
Не является сельдереем для асинхронных задач? – Alvaro
@ Альваро Да .. Мне что-то не хватает ... Думаю, мне нужно изменить представления, чтобы они не блокировались, чтобы вычисление и результат были асинхронными. Вы можете мне помочь? – Geum
Я не так свободно владею сельдереем, но вы должны проверить различные серверы обмена сообщениями, которые можно использовать для отслеживания состояния задачи. Проверьте это: http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#keeping-results – Alvaro