python ray无法完成所有远程调用

问题描述

所以我有一个简单的脚本

import ray
import requests as r

ray.init()

@ray.remote
def f(i):
    print(i)
    r.get("http://127.0.0.1:5000/" + str(i))
    return i

if __name__ == "__main__":
    for k in range(1000):
        f.remote(k)

当我运行此脚本时,仅发生250个远程调用,并且程序终止而不是执行所有1000个远程调用

即使查看了ray浏览器仪表板,我还是一无所知

当我设置local_mode = True时,程序将完成所有1000次调用

解决方法

f.remote(k) 开始执行远程调用,但不等待调用结束。因此,程序将在调用完成之前完成并关闭。

您应该使用ray.get来确保通话结束。

refs = []
for k in range(1000):
    refs.append(f.remote(k)
ray.get(refs)

有关更多详细信息,请参见this answer