我有一个在构造函数中带参数的对象。我想知道如何从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")
修改
我认为这个问题写得不正确,请参阅下面的答案。
答案 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
的形式提供。