检查 Pyro 远程对象是否可达

Checking if Pyro remote objects are reachable

我的每个虚拟机中都有一个 Pyro 服务器 运行ning。这些都是相同的对象,我只是 运行ning 它们以确保可靠性。我希望能够监控这些对象是否 "alive" 并且可以访问。

假设我有他们的 URI,我如何在不尝试 运行 实际对象的方法来查看它是否 运行 的情况下检查它?

一个选择是在这些对象中编写一个简单的 noop 方法,远程调用它,如果出现连接问题,我会知道该对象无法访问。

Pyro 是否有内置的方法来做到这一点?似乎是一个足够常见的用例。

您不必向对象添加 noop / ping 方法,因为您可以为此在代理对象上使用 _pyroBind() 方法。如果对象不可访问,它将引发 CommunicationError。例如,查看名称服务器是否在端口 9999 上为 运行:

import Pyro4
import Pyro4.errors

with Pyro4.Proxy("PYRO:Pyro.NameServer@localhost:9999") as p:
    try:
        p._pyroBind()
        print("YEP IT IS RUNNING!")
    except Pyro4.errors.CommunicationError:
        print("NOPE IT IS NOT REACHABLE!")