如何在python中执行另一个已经执行的任务后执行芹菜任务?



我需要在第一个芹菜任务准备好后执行第二个芹菜任务。第一个任务已经在运行,并且我有它的id。我如何将另一个链接到它?

# first task
first_task = change_timezone_geodata_task.delay(node.id, timezone, geodata_id)
task_id=  first_task .id
new task = change_timezone_geodata_task.delay(node2.id, timezone2, geodata_id2)

如何使新任务在任务之后执行?

解决这个问题的第一件事就是依靠芹菜的任务链接能力。

正如你提到的你的任务现在正在运行所以通过id你可以发现你的任务是否完成了它是从这个答案

from celery.result import AsyncResult
from .tasks import app
res = AsyncResult('655890aa-4f02-467d-aaca-20004b70efe8d',app=app)
status = res.state # 'SUCCESS'
from .tasks import task2
if status == 'SUCCESS':
task2.delay()

但是如果你想让它们一个接一个地运行,你可以这样做:

如果你不希望你的回调接受前一个的结果Task作为参数,则可以使链接的部分不可变使用si()代替s()

(如前所述)

from tasks import sum, increase_counter
​
sum.apply_async((8,8), link=increase_counter.si()) # Calculate 8 + 8 and increase counter of sum task calls

相关内容

  • 没有找到相关文章

最新更新