博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Pyro简单使用(一)

Posted on 2010-11-06 21:31  三块石头  阅读(5373)  评论(0)    收藏  举报

Pyro,即Python Remote Object,类似于Hessian,可以进行远程对象(方法)调用。不过和Hessian不一样,Pyro利用python本身的pickle模块进行序列化、反序列化,更pythonic,也更方便。

为了用Pyro,我们必须先启动一个服务,然后将要发布的服务注入到该服务中,这样远程用户就可以访问到了。如下面的例子:

1 class Echo:
2 def say_hello(self,name):
3 return 'Hello,%s'%name

我们现在要做的是把这个Echo对象发布成一个服务以便用户调用。

Server.py
1 #coding=utf-8
2  import Pyro.core
3  from Demo import Echo
4  #监听端口,创建守护线程
5  daemon=Pyro.core.Daemon(host='localhost',port=9000)
6  #启动服务
7 Pyro.core.initServer()
8 #创建代理对象
9 proxy=Pyro.core.ObjBase()
10 proxy.delegateTo(Echo())
11 #设置服务的名字为echo
12 daemon.connect(proxy, "echo")
13 #循环调用给
14 daemon.requestLoop()

 

 

运行Server.py,它就会在本地监听9000端口。写好了服务端,看看客户端怎么连接。

 

Client.py
1 #coding=utf-8
2 import Pyro.core
3 #远程调用地址
4 url='PYROLOC://localhost:9000'
5 #创建代理对象,返回的就是就是一个Echo对象的实例
6 proxy=Pyro.core.getProxyForURI(url+"/echo")
7 #输出 Hello zhaolei
8 print proxy.say_hello("zhaolei")
9 #输出Hello 石头
10 print proxy.say_hello("石头")

 

客户端连接到服务端很简单,只需要设置好URL,就可以获得代理对象了。接下来,和调用普通的对象没有任何区别,Pyro已经帮我们全部做好了,很简单是不是?

熟悉Spring的同学应该会知道Spring对Hessian进行了封装,用户只需要在配置文件夹中配置好接口和要实现了的类即可,不知道Python中有没有这样的封装?有的,现在Spring在python中有一个分支叫做SpringPython,它实现了Spring的大部分功能,比如控制反转、依赖注入、事务管理等。下篇文章我们就讲讲如何在SpringPython中使用Pyro