退出前等待所有任务完成的标准方法

Standard way to wait for all tasks to finish before exiting

我想知道 - 有没有一种直接的方法可以等待所有任务完成 运行 然后退出而不跟踪所有 ObjectID(和 get()ing 它们) ?用例是当我启动 @remotes 以保存输出时,例如,在不需要 return 结果的情况下。如果我必须存储这些期货,这只是额外的东西来跟踪。

目前没有标准的方法来阻止所有任务完成。

有一些解决方法可以使用。

  1. 跟踪列表中的所有对象 ID object_ids,然后调用 ray.get(object_ids)ray.wait(object_ids, num_returns=len(object_ids))

  2. 只要一些资源被使用就循环。

    import time
    
    while (ray.global_state.cluster_resources() !=
           ray.global_state.available_resources()):
        time.sleep(1)
    

    以上代码会一直循环,直到检测到当前没有任何任务在执行。然而,这不是万无一失的方法。可能有一段时间没有任务 运行 但调度程序任务即将开始 运行.