如何同步 Django 芹菜任务?



>我有两个芹菜任务

@app.task(bind=True)
def task1():
@app.task(bind=True)
def task2():

每个任务都由不同的 API 调用,如下所示

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def api1(request):
task_1.delay()
@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def api2(request):
task_2.delay()

如果在 Task1 在后台运行时调用 task2, 我想在任务 1 完成后运行任务 2

我该如何解决问题?

我还在考虑为每个用户提供一个队列

请给我一个完美的解决方案...

您的问题由两个子问题组成:

  1. 确保task2在运行时不会启动task1。您可以通过实现分布式锁来解决此问题,例如使用 Redis。
  2. 确保task2在完成后task1开始。这可以通过重试task2直到锁可用来解决。

下面是一些伪代码:

def task1():
with distributed_lock():
# do actual task
def task2():
while not is_lock_available():
self.retry()
# do actual task

有几个细节需要考虑:

  • 如果在task1已在运行时触发task1会发生什么情况?
  • 如果在task2已经在运行时触发task2会发生什么情况?
  • 在等待task2作业开始之前,什么样的延迟是可以接受的?
  • 如果在完成task1和等待task2作业启动之间安排了另一个task1作业,会发生什么情况?

相关内容

  • 没有找到相关文章

最新更新