Pyro4,使用构造函数参数提供对象。怎么样?

时间:2011-11-16 11:45:07

标签: python pyro

我有一个在构造函数中带参数的对象。我想知道如何从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")

修改

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

2 个答案:

答案 0 :(得分:3)

上面的答案不是我真正要求的,这意味着我严重地解释了我的问题。 Mea Culpa。

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

邮寄Irmin(原始开发者)后,我很清楚Pyro4是如何工作的。

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

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

product是Product()类的一个实例。因为实例是在Pyro守护程序中注册的,所以我也可以在这个Product()实例上调用方法。看看购物车示例,了解我在哪里获得了我的时刻。

答案 1 :(得分:0)

您可以:

而不是Pyro4.Daemon.serveSimple
  • 使用Pyro4.locateNS
  • 获取名称服务器
  • 创建Pyro4.Daemon对象
  • 创建需要公开的对象
  • 使用守护程序register方法使其可用
  • 使用名称服务器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_object URI将在名称服务器中以MyPyroThing的形式提供。