如何在python中完成所有芹菜组任务后调用该方法



目前我正在做celener组任务,我想在所有任务完成后调用upload_local_directory(output_file(方法。我尝试了以下方法,但它并没有等到工作完成。

tasks = [make_tmp_files.s(page.object_list, path + str(uuid.uuid4() + '.csv')) for page in paginator]
job = group(tasks)
job.apply_async()
job.get()
output_file = 'final.zip'
upload_local_directory_into_S3(output_file)

make_tmp_files法是芹菜作业法。

"backend"也在芹菜对象中定义。

如果需要更多信息,请发表评论。

您可以将您的组和最后的make_tmp_files任务链接起来,也可以使用Chord来完成同样的任务。如果您看到Celery自动将group+任务链转换为Chord,请不要担心。

在芹菜中,一组任务和一组任务结果之间存在差异。如果你要将代码更改为以下内容,它应该可以工作:

tasks = [make_tmp_files.s(page.object_list, path + str(uuid.uuid4() + '.csv')) for page in paginator]
job = group(tasks)
job_results = job.apply_async()
job_results.get()
output_file = 'final.zip'
upload_local_directory_into_S3(output_file)

job.apply_async()返回一组AsyncResults。作为用户,您需要检查AsyncResult的结果,而不是任务本身。

参考:https://docs.celeryproject.org/en/stable/userguide/canvas.html#groups

希望这能有所帮助!

最新更新