我有一个任务,每次处理新任务时都会创建一个任务历史记录。我在任务函数的开头实例化一个新的TaskHistory实例。由于某种原因,在先前任务中分配的TaskHistory类属性被分配给后续任务中的TaskHistory类属性。例如,如果任务成功,我指定:
public IsCurrentUserAdmin(): Promise<Boolean> {
const isAdminData = await httpService.goGetTheData();
// do something with the data to get the value
return isAdmin;
}
在后续任务中,它可能会失败,我指定:
task_history.meta['success'] = 'Successfully processed {} rows '.format(row_count)'
后续任务应该只分配元[&#39;错误&#39;],但即使task_history已重新实例化,它也会分配先前的元[&#39;成功]值。
以下是调用任务的代码:
task_history.meta['error'] = 'Processed {} rows '.format(row_count) + str(e)
以下是任务功能:
args = [file_ids]
kwargs = {'requester': request.user.profile}
csv_import.apply_async(args=args, kwargs=kwargs)
答案 0 :(得分:0)
最后这与芹菜无关,但我在模型中设置了meta字段的默认值。元字段是 JSONfield(),我将默认值设置为 default = {} ,它创建了一个可变实例,并在JSONfield的所有实例之间共享。我通过将其设置为可调用的 dict 来修复此问题。现在,新字段显示如下:
meta = JSONField(default=dict)
有关此内容的更多信息,请访问https://docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#jsonfield。这与所有模型默认值应使用的标准相同。