2014-02-28 5 views
1

djcelery taskmeta 테이블을 확장하고 싶습니다. 예를 들어 정수 값을 반환하는 예약 된 작업이 있습니다.djcelery 작업 메타 테이블 확장

taskmeta 테이블의 date_done 필드와 함께이 데이터를 그래프로 표시 할 수 있도록이 값을 저장할 필드를 추가하고 싶습니다.

새 모델을 만들고 taskmeta 테이블과 외래 키 관계를 만들려고했는데 내 작업 내에서 task_id을 기반으로이 새 테이블에 행을 추가하려고했습니다.

하지만 작업이 실행되는 동안 나는 즉, taskmeta 데이터가이 시점에서 저장되지 않은 가정으로, 내가 할 수 없을 것 같아요

if mover.request.id: 
    try: 
     task = TaskMeta.objects.get(task_id=mover.request.id) 
        extend_task_info = TaskExtended(task=task) 
        extend_task_info.save() 
    except ObjectDoesNotExist: 
     logger.error('Task ID: %s not in the DB' % mover.request.id) 

태스크 코드의 추가 :

@task() 
def mover(): 
    for root, dirs, files in os.walk(src_dir): 
     path = root.split('/') 
     for file in files: 
      counter = process_file(os.path.join(root, file)) 

    if mover.request.id: 
     try: 
      tn = TaskMeta.objects.get(task_id=mover.request.id) 
      extend_task_info = TaskExtended(task=task) 
      extend_task_info.counter = counter 
      extend_task_info.save() 
     except ObjectDoesNotExist: 
      logger.error('Task ID: %s not in the DB' % mover.request.id) 
+0

오류가 있습니까? – Drewness

+0

예 예외가 발생 함, 작업 ID : eb381eda-6f2e-4c2c-8731-f290c02e4d2d DB에 없음 –

답변

1

task.AsyncResult(task_id)을 사용하십시오. 자세한 내용은 here 문서에서 확인할 수 있습니다.

+0

죄송 합니다만, 완전히 이해하고 있는지 확실하지 않습니다. 이것은 AsyncResult를 반환합니다. 이 방법으로 확장 된 정보를 작업 메타 테이블에 저장하거나 작업을 수행하는 동안 다른 정보로 확장하는 데 어떻게 도움이됩니까? 당신은 정교 할 것입니까? 감사. –

+0

@JoeLones - 물론입니다. '.AsyncResult()'를 사용하면 실행중인 작업에 대한 액세스 권한을 얻을 수 있습니다. 왜냐하면 네가 존재하기 전에 확장하려고했기 때문에 어떤 경우에 좋을까? 아니면 끝나지 않았기 때문에,'ObjectDoesNotExist' 예외이다. – Drewness

+0

필자는 자신의 의견을 수정하고 필자의 작업 코드를 추가했다. 위의 코드에서 예외가 항상 트리거를 가져 오지는 않습니다. 작업이 끝나면 작업 메타 데이터가 저장되지 않습니까? –