在第二个独立计划的任务中等待来自一个任务的数据

Wait for data from one task in a second independently scheduled task

我有两张表格要按顺序填写。第一个是必需的,第二个是可选的。两者都启动 Celery 任务来处理表单数据,但第二个需要第一个任务将写入数据库的数据。

我发现如果第一个和第二个表单提交得很快,第二个任务会失败,因为第一个任务还没有完成并保存数据。

如何确保第一个任务的数据可用于第二个任务?第二个任务需要通过表单提交来调度,因为第二个表单是可选的,所以不能是第一个任务的回调。

如果数据还没有,请在延迟后继续重试第二个任务。或者在第一个任务之后通过回调安排第二个任务。无论哪种方式,您都必须检查所需的数据是否可用:如果您独立安排第二个数据,则需要等待查看第一个数据是否存在,如果您在第一个数据之后安排第二个数据,则需要等待看看第二个数据有没有

以下计数直到停止值,在重试之间等待五秒钟,然后打印 'done'。这模拟重试任务,直到您想要的数据可用。设置 max_retries 会更安全,以防第一个任务失败并且没有设置所需的数据。 bind=True 将任务对象作为第一个参数传递给函数。

@celery.task(bind=True, max_retries=None)
def count_until(self, stop, current=0):
    print(current)

    if current < stop:
        raise self.retry(args=(stop, current + 1), countdown=5)

    print('done')
count_until.delay(5)

在填写整个表单后安排单个任务会更有意义。然后你只需要安排一次任务,就可以确保它有完整的数据。如果用户没有完成这两种形式,这也将防止某些数据处于中间状态。