2017-10-27 37 views
0

새 작업이 처리 될 때마다 작업 기록 레코드를 만드는 작업이 있습니다. 태스크 함수의 시작 부분에서 새 TaskHistory 인스턴스를 인스턴스화합니다. 어떤 이유로 이전 작업에서 할당 된 TaskHistory 클래스 속성은 후속 작업에서 TaskHistory 클래스 속성에 할당됩니다. 이 실패 할 수 있습니다 후속 작업에서는셀러리 작업이 후속 작업에서 로컬 인스턴스 속성을 지정합니다.

task_history.meta['success'] = 'Successfully processed {} rows '.format(row_count)' 

을 내가 지정 : 작업이 성공하면 예를 들어, 내가 지정

task_history.meta['error'] = 'Processed {} rows '.format(row_count) + str(e) 

후속 작업은 메타 [ '오류'] 지정해야하지만 할당하는 것 task_history가 reinstantiated 경우에도 이전 메타 [ '성공'] 값. 이 내가 설정 방법 셀러리하지만 무관했다 결국

@task 
def csv_import(file_ids, requester=None): 
    task_history = TaskHistory() 
    task_history.requester = requester 
    task_history.status = 'pending' 
    task_history.started = timezone.now() 
    task_history.save() 
    row_count = 0 
    try: 

     //main logic goes here 

     task_history.status = 'completed' 
     task_history.completed = now() 
     task_history.meta['success'] = 'Successfully processed {} rows '.format(row_count) 
     task_history.save() 
    except Exception as e: 
     task_history.status = 'failed' 
     task_history.completed = timezone.now() 
     task_history.meta['error'] = 'Processed {} rows '.format(row_count) + str(e) 
     task_history.save() 
     raise Exception 

답변

0

: 아래

args = [file_ids] 
kwargs = {'requester': request.user.profile} 
csv_import.apply_async(args=args, kwargs=kwargs) 

가 작업 기능입니다 : 아래

는 작업을 호출하는 코드입니다 내 모델의 메타 필드에 대한 기본값. 메타 필드는 JSONfield()이고 기본값은 기본값 = {}으로 설정됩니다.이 인스턴스는 변경 가능한 인스턴스를 만들고 JSONfield의 모든 인스턴스간에 공유됩니다. 나는 이것을 callable dict으로 설정하여 이것을 고쳤습니다. 새로운 필드는 이제 다음에 나타납니다 :이 약

meta = JSONField(default=dict) 

자세한 내용은 여기 https://docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#jsonfield 찾을 수 있습니다. 이것은 모든 모델 기본값에 사용되는 표준과 동일합니다.