0
내 작업은 샐러리에 들어가서 결과를 얻습니다. 내가 이것을 할 수 있기 때문에 나는 이것을 안다.Django Celery - 누락 된 항목이 있지만 무엇이 있는지 전혀 모릅니다. 결과는 있지만 얻을 수는 없습니다
>>> ts = TaskState.objects.all()[0]
>>> ts
Out[31]: <TaskState: SUCCESS apps.checklist.tasks.bulk_checklist_process(ec01461b-3431-478d-adfc-6d6cf162e9ad) ts:2012-07-20 14:35:41>
>>> ts.state
Out[32]: u'SUCCESS'
>>> ts.result
Out[33]: u'{\'info\': ["Great",]}'
그러나 나는 결과를 얻을 수있는 documented 방법을 사용하려고 할 때 - 느슨한 모든 지옥 나누기 ..
>>> from celery.result import BaseAsyncResult
>>> result = BaseAsyncResult(ts.task_id)
>>> result.get()
../lib/python2.7/site-packages/djcelery/managers.py:178: TxIsolationWarning: Polling results with transaction isolation level repeatable-read within the same transaction may give outdated results. Be sure to commit the transaction for each poll iteration.
"Polling results with transaction isolation level "
그래서 저는 두 가지 질문이 있습니다.
- 이 오류의 원인은 셀러리 설정에 무엇이 누락 되었습니까? 나는 결과를 분명히 가지고 있지만 BaseAsyncResult가 제거되었습니다. 이걸 어디에서 찾을 지조차 몰라?
- 초 동안 1을 무시하고는 내가 가지고있는 한 마치
ts.state == SUCCESS
일뿐입니다.ts.result
으로 실행할 수 있습니다. 그 단점은 무엇이며 그 결과는 어떤 형식입니까?
업데이트
그래서 두 번째 부분은 간단합니다.
TxIsolationWarning: Polling results with transaction isolation level repeatable-read
within the same transaction may give outdated results. Be sure to commit the transaction
for each poll iteration.
결과에 대한 데이터베이스를 사용하려면, 당신이 원하는 경우 동일한 프로세스에서 그들을 위해 폴링 : 그것은 당신이 붙여 경고에 너무 좋아 말한다
context['results'] = resulting_values = result.get(propagate=False)
if not isinstance(resulting_values, dict):
context['results'] = resulting_values = eval(context['task'].result)
log.error("We should not be here..")