2014-09-12 1 views
2

내 장고 (버전 1.5.4) 프로젝트에서 지연된 작업을 관리하기 위해 Cerely (버전 3.0.25)을 사용하고 있습니다.Celery : 작업이 너무 빨리 실행되어 업데이트 된 DB를 검색 할 수 없습니다.

쿼리을 저장 한 후 이 (가) celery로 업데이트 된 DB를 검색 할 때 문제가 발생했습니다.

다음은 샘플 코드입니다. 내가 작업을 1 초 지연시 ( views.py) 한마디로

# import model 
from .models import SampleModel 

# import celery task 
from utils.tasks import GetLastID 

# Sample function in view 
def save_query(): 

    # Sample saving query. Let's assume that query.id returns value "7" 
    query = SampleModel(field_A="A", field_B="B") 
    query.save() 

    # Case 1 : this return "6" which is a past 'Last ID value' (not expected) 
    GetLastID.apply_async(args=[], countdown=0) 

    # Case 2 : this return "7" which is most recent ID value as expected 
    GetLastID.apply_async(args=[], countdown=1) 

는, 내가 값을 예상되었다. 그러나 셀러리 작업을 지체없이 실행했을 때 값이 업데이트되지 않았습니다.

" 셀러리가 너무 빨리 실행되어 업데이트 된 DB을 검색 할 수 없다"고 생각합니다.

은 지연없이 예상 값을 얻을 수 있습니까? 다음은 내가 생각한 의사 코드입니다.

(query.save() | GetLastID()).delay() 

미리 감사드립니다.

+0

를 사용하는 예는 장고보기 기능에 SampleModel를 저장하는 코드를인가? – falsetru

+0

@falsetru 예, views.py에 있습니다. –

답변

2

셀 방식 작업을 호출하기 전에 명시 적으로 변경 내용을 커밋하는 것이 하나의 방법입니다.

django.db.transaction.commit_manually

from django.db import transaction 

@transaction.commit_manually # <---- 
def view(request, ...): 
    query = SampleModel(field_A="A", field_B="B") 
    query.save() 
    transaction.commit() # <---- 

    GetLastID.apply_async(args=[]) 
+0

그게 문제를 해결하는 것 같습니다. 솔루션을 지금 바로 확인할 수 없으므로 나중에이 코드를 적용하고 결과를 알려 드리겠습니다. 빠른 답변 주셔서 감사합니다. –

관련 문제