django - Django:芹菜为同一任务显示不同的状态
问题描述
我有一个 django 应用程序,有两个芹菜任务,比如 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 发送到前端。
解决方案
推荐阅读
- ios - iOS离线首个app单一责任问题
- python - 根据另一列中的值更改一列中的条目
- angular - 角度绑定属性
- c# - 无法使用 c# 在 selenium webdriver 中自动化 kendo 下拉列表
- javascript - 如何使用正则表达式根据字符串过滤数组项?
- java - 如何在 java 中执行 graphql?
- sql-server - 当列在 SELECT 的 CASE 中使用时,我们可以避免/纠正按列分组吗
- python - Pandas 在多索引中连接级别
- java - 使用 twilio 沙箱在 whatsapp 上发送多条媒体消息
- android - 移除了设备支持