Python 有没有一种优雅的方法可以用pytest测试ray远程功能?

Python 有没有一种优雅的方法可以用pytest测试ray远程功能?,python,ray,Python,Ray,假设你有这样一个函数: @ray.remote def remote_function(): return 1 您可以像这样测试它: def test_remote_function(): ray.init() x=ray.get(remote_function.remote()) assert x==1 但这意味着在不需要它的情况下初始化ray(我只想测试函数本身)。在我的例子中,它甚至不必是异步的或线程化的 我所做的是访问其受保护的包装功能: def te

假设你有这样一个函数:

@ray.remote
def remote_function():
    return 1
您可以像这样测试它:

def test_remote_function():
    ray.init()
    x=ray.get(remote_function.remote())
    assert x==1
但这意味着在不需要它的情况下初始化ray(我只想测试函数本身)。在我的例子中,它甚至不必是异步的或线程化的

我所做的是访问其受保护的包装功能:

def test_remote_function():
    assert remote_function._function() == 1
但这让我感觉很不舒服,而且门楣也因此不服从我:)

我想要的是这样的pytest夹具:

def test_remote_function(ray):
    x=ray.get(remote_function.remote())
    assert x==1

明确地使其同步(实际上不使用光线)

我看到ray的内部测试有一些pytest装置,但我想没有暴露出来

有人知道更好的方法吗?

基于以下内容的解决方案:

像这样使用它:

def test_remote_function(ray_fix):
    x=ray.get(remote_function.remote())
    assert x==1
这样,ray仍然使用/初始化,但每个模块仅使用一次

在我的例子中,这增加了约2秒的总测试持续时间,可以忽略不计

如果ray附带了一套默认的pytest装置,那就太好了


谢谢你的提示

为什么不在测试中初始化Ray?是避免调用
ray.init()
的开销的原因吗?一些建议。首先,可以调用
ray.init(num\u cpus=1)
,以避免启动太多不必要的工作进程。第二,您可以定义一个模块级的pytest夹具,该夹具对Ray进行一次初始化,这样您就不会为每个测试初始化Ray。您还可以将
ray.shutdown()
添加到夹具中,以便在测试结束时关闭ray。
@pytest.fixture(scope="module")
def ray_fix():
    ray.init(num_cpus=1)
    yield None
    ray.shutdown()
def test_remote_function(ray_fix):
    x=ray.get(remote_function.remote())
    assert x==1