问题描述
我有一个 django 应用程序,有两个 celery 任务,比如 task1 和 task2。 task1 在来自前端的 POST 请求上被触发,并且该请求必须发回任务 ID,以便前端可以稍后轮询其状态。 task2 应该在 task1 成功后异步运行。
这是我的任务定义:
@shared_task(ignore_result=False)
def task1(pk: int):
# retrieve object matching pk
return task1_func(obj)
@shared_task(ignore_result=False)
def task2(task_id: int):
task = AsyncResult(task_id)
while not task.ready():
logger.info("status {}".format(task.status))
time.sleep(1)
return task2_func()
这是我在 views.py 中触发它们的方式:
class MyView(viewsets.ModelViewSet):
def create(self,request):
# create object
task = task1.delay(obj.pk)
task2.delay(task.id)
#breakpoint
return Response(task.id,status=status.HTTP_200_OK)
现在当我尝试在断点处检查状态时,它显示成功:
In [1]: task.id
Out[1]: '97f8d150-de04-4848-a400-3882988c833c'
In [2]: task.status
Out[2]: 'SUCCESS'
In [3]: AsyncResult(task.id).status
Out[3]: 'SUCCESS'
但是 task2 中的代码永远不会被执行,因为 task2 中 task1 的状态永远不会从 PENDING
改变。我究竟做错了什么?显然,我的结果正在被存储和访问,但由于某种原因,我无法从另一个任务中看到状态的变化。
我无法链接任务,因为我必须将第一个任务的 ID 发送到前端。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)