我有一个任务backsync_objects
,该任务从API提取一组对象并在数据库中创建或更新它们。
例如,如果我更改服务器上一个对象的顺序,则会由于多个对象更改顺序而将多个webhook发送到客户端。
问题在于这种类型的任务不能一次运行多次,因为如果不存在这样的对象,它将创建一个或多个对象。就我而言,它创建了多个相等的对象,因为尚未提交来自先前Webhook的对象。
def post(self, request, *args, **kwargs) -> HttpResponse:
tasks.backsync_all_stages.delay()
我决定为此使用芹菜,有两种选择
同步运行这些任务,以保持完整性
芹菜-myproj --concurrency = 1工人-l信息
仅运行第一个或最后一个任务(换句话说,防止队列中重复backsync_all_stages
个任务)
第一个解决方案有效,但是此任务总是重复2,3甚至10次(取决于更改顺序的阶段数)。
所以我想检查队列中是否有这样的任务或正在处理,然后将该任务添加到队列中或什么都不做。
您有什么建议吗?也许还有更好的选择。
编辑
在此项目中,将有例如电子邮件发送任务,因此出于明显的原因,我不能仅使所有任务按顺序运行。