我有两个芹菜任务
@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,我想在task1完成后运行task2
我怎么能解决这个问题?
我也在考虑为每个用户分配一个队列
请给我一个完美的解决方案......
1 回答
您的问题包含两个子问题:
确保
task1
在task1
运行时未启动 . 您可以通过实现分布式锁来解决此问题,例如: using Redis.确保
task2
在task1
完成后启动 . 这可以通过re-tryingtask2
解决,直到锁定可用 .这是一些伪代码:
有几个细节需要考虑:
如果在
task1
已经运行task1
时会发生什么?如果在
task2
已经运行的情况下task2
被触发会怎么样?在等待
task2
工作开始之前可以接受什么样的延迟?如果在
task1
完成和等待task2
作业之间安排了另一个task1
作业,会发生什么?