新しいタスクが処理されるたびにタスク履歴レコードを作成するタスクがあります。タスク関数の先頭に新しい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が再インスタンス化されたとしても、以前のmeta ['success']の値になります。以下は
タスクを呼び出すコードです:以下
args = [file_ids]
kwargs = {'requester': request.user.profile}
csv_import.apply_async(args=args, kwargs=kwargs)
は、タスク機能さ:
@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