1

我有一个在构造函数中接受参数的对象。我想知道如何从 Pyro4 提供这个。一个例子:

import Pyro4

class MyPyroThing(object):
    def __init__(self, theNumber):
        self.Number = theNumber

Pyro4.Daemon.serveSimple(
    {
        MyPyroThing(): None
    },
    ns=True, verbose=True)

这当然会失败,因为构造函数必须有一个参数。

当这个问题解决后,你如何调用这样的对象?

theThing = Pyro4.Proxy("PYRONAME:MyPyroThing")

编辑:

我认为这个问题写得不正确,请参阅下面的答案。

4

2 回答 2

3

上面的答案不是我真正要问的,这意味着我对我的问题的解释很糟糕。过错。

我想在客户端调用一个实例。但这根本不是 Pyro4 的工作方式。在服务器上实例化的一个类,这个实例通过网络传输。

在给Irmin (最初的开发者)发邮件后,我明白了 Pyro4 是如何工作的。

所以,我现在要做的是使用工厂模式,我要求工厂给我一个对象的实例。例如:

psf = Pyro4.Proxy("PYRONAME:MyApp.Factories.ProductFactory")
product = psf.GetProductOnButton(buttonNoPressed, parentProductId)

product 是 Product() 类的一个实例。因为该实例是在 Pyro 守护进程中注册的,所以我也可以在这个 Product() 实例上调用方法。查看购物车示例,了解我的灵感来自哪里。

于 2011-11-18T22:06:06.583 回答
0

而不是使用Pyro4.Daemon.serveSimple你可以:

  • 使用获取名称服务器Pyro4.locateNS
  • 创建一个Pyro4.Daemon对象
  • 创建您需要公开的对象
  • 使用 daemonregister方法使它们可用
  • 使用名称服务器register方法提供名称到 uri 的映射
  • 启动守护程序循环

代码或多或少如下:

import Pyro4

name_server = Pyro4.locateNS()
daemon = Pyro4.Daemon()
my_object = MyPyroThing(parameter)
my_object_uri = daemon.register(my_object)
name_server.register('MyPyroThing', my_object_uri)

daemon.requestLoop()

在此之后,my_objectURI 将在名称服务器中作为MyPyroThing.

于 2011-11-16T13:46:22.540 回答