중요하지는 않지만 이는 this question의 후속 조치입니다.Django Celery를 사용하여 개체에보기 카운터 추가
내 데이터베이스의 각 개체를 본 횟수를 계산하고 싶습니다. 여러 인스턴스와 함께 Person
모델이 있다고 가정 해 보겠습니다. Django Celery를 사용하여 데이터베이스 쓰기를 기다리는 것을 피하기 위해 Person
모델에서 각 인스턴스를 몇 번 보았는지 카운터를 유지하려고합니다. 순간
from celery.decorators import task
class Person(models.Model):
name = models.CharField(max_length=50)
class Stats(models.Model):
person = models.ForeignKey('Person', unique=True)
@task
def addView(self):
se = StatEvent()
se.save()
self.views.add(se)
class StatEvent(models.Model):
date = models.DateTimeField(auto_now_add=True)
, 사람의 페이지를 나열 뷰를 호출 할 때마다, 나는 모든 사람을 얻을,이 같은 통계를 업데이트 :
person.get_stats().addView.delay(person.get_stats())
그런 다음 브라우저에 표시 할 사람 목록을 반환합니다. 나는 통계의 업데이트가 비동기식으로 일어날 것이라고 생각했지만 셀로리 명령 창에 추가 할 때마다 print
문을 표시함으로써 페이지가 표시되기 전에 명확하고 긴 지연이있었습니다. 페이지는 마지막 통계가 업데이트 된 후에 만 렌더링됩니다.
사용자가 데이터베이스 업데이트가 완료 될 때까지 기다리지 않는 방법은 무엇입니까? 업데이트
나는이 개별적으로 각 사람을 처리하는 데 충분한 작업자 프로세스가없는 함께 할 수있는 뭔가가있을 수 있습니다 생각, 그래서 내가 대신 매개 변수로 사람들의 목록을 허용하는 함수를 만들고, 이것을 사용 실행될 작업으로 그래서, 큐에 하나의 작업 :
@task(ignore_result=True)
def addViews(persons):
for person in persons:
stats = listing.get_stats()
se = StatEvent()
se.save()
stats.views.add(se)
그러나, 콘솔, 같은 인쇄 :
print "adding"
print tasks.addClicks(persons)
print "done"
그런 다음 "추가"및 "완료"단계 사이에 명확한 지연이있다, 함수의 리턴 값은 None
입니다.