我有两个芹菜任务
@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
我怎么能解决这个问题?
我还考虑为每个用户提供一个队列
请给我一个完美的解决方案......
答案 0 :(得分:1)
您的问题包含两个子问题:
task2
在task1
运行时无法启动。您可以通过实现分布式锁来解决此问题,例如: using Redis. task2
在task1
完成后启动。这可以通过re-trying 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
完成和等待task1
作业开始之间安排了另一个task2
作业,会发生什么?