Django / Celery-同步运行一种类型的任务或防止重复的任务

时间:2019-03-21 15:48:27

标签: python django concurrency celery webhooks

我有一个任务backsync_objects,该任务从API提取一组对象并在数据库中创建或更新它们。

例如,如果我更改服务器上一个对象的顺序,则会由于多个对象更改顺序而将多个webhook发送到客户端。

问题在于这种类型的任务不能一次运行多次,因为如果不存在这样的对象,它将创建一个或多个对象。就我而言,它创建了多个相等的对象,因为尚未提交来自先前Webhook的对象。

def post(self, request, *args, **kwargs) -> HttpResponse:
     tasks.backsync_all_stages.delay()

我决定为此使用芹菜,有两种选择

  1. 同步运行这些任务,以保持完整性

    芹菜-myproj --concurrency = 1工人-l信息

  2. 仅运行第一个或最后一个任务(换句话说,防止队列中重复backsync_all_stages个任务)

第一个解决方案有效,但是此任务总是重复2,3甚至10次(取决于更改顺序的阶段数)。

所以我想检查队列中是否有这样的任务或正在处理,然后将该任务添加到队列中或什么都不做。

您有什么建议吗?也许还有更好的选择。

编辑

在此项目中,将有例如电子邮件发送任务,因此出于明显的原因,我不能仅使所有任务按顺序运行。

0 个答案:

没有答案