python Pyro(python中的RMI)学习笔记一
来源:互联网 发布:汇丰软件 劝退 编辑:程序博客网 时间:2024/06/10 09:47
点击查看官方文档资料
Pyro的学习很不方便,这方面的资料很少,即使能找到也仅有英文的,而且也不多。只能从官方文档里学习了,不过在pyro的svn有不少绝佳的例子。
我用的是第三版的pyro,
前三个部分就不介绍了,下载,setup都很简单。
下面我介绍Pyro Usage
1,被远程调用的一定是一个class类,并且__init__不能被调用
2,返回值要是能被pickled的,想是file类型的就不能。pyro的连接是可持续的
3,server端的类要继承
obj = Pyro.core.ObjBase()
obj.delegateTo(impl)然后连接obj跟Daemon
4 结束退出,daemon.shutdown()
断开连接
self.value+=value
returnself
)不过在RMI中这个要改成return self.getAttrProxy()
7,如果要调用到其他的远程项目,最好是是采取多线程技术.
Introduction
其实按照pyro上提供的那个简单例子,很多都可以了解了,
如果的sever已经注册了一个class,可以用pyro-nsc来解注册或者重启
Pyro script tools
pyro有两种风格的命令行,unix与windows。其中win风格的是以.cmd后缀结尾的。
pyro-genguid(GUID generator)
没有参数,这个是十分简单的
pyro-ns(Name Server)
pyro-es(Event Server)
pyro-nsc(Name Server Control tool)
参数列表[-h host][-p port][-cbcaddr][-i identification] command [args..]
大部分没什么好解释的,其中bcaddr是指,允许你重载broadcastaddress广播地址。如果这些信息中包含有空格,就用引号包起来。
'command' is one of the following:
pyro-wxnsc,也是GUI,不过是用到WxPython写的GUI
pyro-nssvc,pyro-essvc(win下的name sever以及event server)
不能直接直接访问class的某个属性,不能再用getters,setters
Write theserver
1,Pyro.core.initServer(),这里有一些可选参数,banner,当banner=1的时候,在标准输出流输出一条信息:
Pyro Server Initialized. Using Pyro V3.16
当然如果你是先创建一个PyroDaemon的话,就不用initServer了,这个在Daemon的时候会自动创建。不过还是初始化来得好。
2,创建一个Pyro Daemon(后台?驱动?守护进程??不知道要翻译成什么)
daemon=Pyro.core.Daemon()
daemon.useNameServer(ns)#Daemon需要知道你的Name Server
其中,daemon=Pyro.core.Daemon()创建Daemon的时候有一些参数,比如
protocol,这个是你创建用的协议,默认为PYRO
host,如果你的系统有个多个IP地址的话,或者多个适配器。不过我只有一个,这项就不考虑了。
port,默认是PYRO_PORT。一般都不用设置,pyro会自动分配给我们,如果没过端口被占用了,那么pyro会继续试下一个端口。不过这个‘试’也是有限制的,在一个范围内,PYRO_PORT_RANGE。如果你想让pyro随机的话,要设置为0,并且设norange=1或者norange=True,
norange,不解释
publishhost,在分布URI的时候,如果你有设置这个选项,那么就用这个。
比如,daemon=Pyro.core.Daemon(port=0,norange=True,publishhost='123.13.123.11')
The object's uri2 is:PYRO://123.13.123.11:51366/0a0402650e8829e6d9672d7cae85e48e
find the Name Server
ns探测器
locator=Pyro.naming.NameServerLocator()
ns=locator.getNS()
现在,ns就有个引用,否则daemon可能会被垃圾回收机制给处理掉。
Pyro的学习很不方便,这方面的资料很少,即使能找到也仅有英文的,而且也不多。只能从官方文档里学习了,不过在pyro的svn有不少绝佳的例子。
我用的是第三版的pyro,
前三个部分就不介绍了,下载,setup都很简单。
下面我介绍Pyro Usage
1,被远程调用的一定是一个class类,并且__init__不能被调用
2,返回值要是能被pickled的,想是file类型的就不能。pyro的连接是可持续的
3,server端的类要继承
Pyro.core.ObjBase
def __init__(self):Pyro.core.ObjBase.__init__(self) ...
或者是
impl = MyRemoteClass()obj = Pyro.core.ObjBase()
obj.delegateTo(impl)然后连接obj跟Daemon
4 结束退出,daemon.shutdown()
断开连接
self.getDaemon().disconnect(object) # can also pass object's UIDdel object5,回调的时候用Pyro.core.CallbackObjBase,6,def __iadd__(self.value):
)不过在RMI中这个要改成return self.getAttrProxy()
7,如果要调用到其他的远程项目,最好是是采取多线程技术.
Introduction
其实按照pyro上提供的那个简单例子,很多都可以了解了,
如果的sever已经注册了一个class,可以用pyro-nsc来解注册或者重启
Pyro script tools
pyro有两种风格的命令行,unix与windows。其中win风格的是以.cmd后缀结尾的。
pyro-genguid(GUID generator)
pyro-ns(Name Server)
pyro-es(Event Server)
pyro-nsc(Name Server Control tool)
'command' is one of the following:
- ping: 看Name Server开了没
- list: prints the contents of a name group. Argument is thegroup name to list.
- listall: prints a list of all registered names (expanded).
- register: 注册一个新的名字,参数是name和URI.
- resolve: 查找Name. Arguments are the names to search for.
- remove: remove registered names from the NS. Arguments are thenames to remove.
- creategroup: create a name group. Argument is the group tocreate.
- deletegroup: delete a name group and all contents. Argument isthe group to delete.
- showmeta: Shows system and user meta info. Argument is thegroup or object to show meta info from.
- setmeta: Set user meta info. Arguments are the object name andthe meta data string.
- shutdown: send the NS a shutdown request, so that a cleanshutdown is performed. No arguments.
pyro-wxnsc,也是GUI,不过是用到WxPython写的GUI
pyro-nssvc,pyro-essvc(win下的name sever以及event server)
- Using
python -m
to start various tools python -m Pyro.naming
- start the name serverpython -m Pyro.EventService.Server
- start theevent serverpython -m Pyro.nsc
- start the nsc tool. Alsoworks with xnsc and wxnsc.python -m Pyro.configuration
- print a dump ofPyro's active configuration settings.python -m Pyro.test.echoserver
- start thebuilt-in echo server. Use '-h' parameter to get some help.
不能直接直接访问class的某个属性,不能再用getters,setters
Write theserver
Pyro Server Initialized. Using Pyro V3.16
当然如果你是先创建一个PyroDaemon的话,就不用initServer了,这个在Daemon的时候会自动创建。不过还是初始化来得好。
daemon=Pyro.core.Daemon()
daemon.useNameServer(ns)#Daemon需要知道你的Name Server
其中,daemon=Pyro.core.Daemon()创建Daemon的时候有一些参数,比如
protocol,这个是你创建用的协议,默认为PYRO
host,如果你的系统有个多个IP地址的话,或者多个适配器。不过我只有一个,这项就不考虑了。
port,默认是PYRO_PORT。一般都不用设置,pyro会自动分配给我们,如果没过端口被占用了,那么pyro会继续试下一个端口。不过这个‘试’也是有限制的,在一个范围内,PYRO_PORT_RANGE。如果你想让pyro随机的话,要设置为0,并且设norange=1或者norange=True,
norange,不解释
publishhost,在分布URI的时候,如果你有设置这个选项,那么就用这个。
比如,
The object's uri2 is:PYRO://123.13.123.11:51366/0a0402650e8829e6d9672d7c
find the Name Server
ns探测器
locator=Pyro.naming.NameServerLocator()
ns=locator.getNS()
现在,ns就有个引用,否则daemon可能会被垃圾回收机制给处理掉。
Create object instances
除了Pyro.core.ObjBase之外,还有两个高级类可用,
Pyro.core.SynchronizedObjBase
- 这个能够确保线程安全,采取同步机制。
Pyro.core.CallbackObjBase
- 回调。
- 回调,这个是在client端写的,比如服务器有什么更新啦,要通知client就可以用这个回调函数,否则让client轮询的话对服务器的资源消耗很大。
- 其实这个回调函数写在client端,供server调用。从这个角度看,此时的client可以看成是‘server’,
- 而server可以看成是‘client’。当然了,回调也可以看出是一个普通的remoteobject,所以可以用Pyro.core.ObjBase,但是,如果程序有异常的话,这个异常不会再server和client两端都跑出。CallbackObjBase就会在两端抛出。
- Onewaycalls没看懂,这个部分没看懂
- daemon.connect(),还可以是daemon.connectPersistent(),Look under the"Automatic Rebinding" topic in the "Features and guidelines"chapter for more info.
requestLoop(condition, timeout, others, callback),参数都是可选的
- python Pyro(python中的RMI)学习笔记一
- python Pyro(python中的RMI)学习笔记
- Python学习笔记(一):Python中的slice
- Python学习笔记(一)----Python基础知识
- Python 学习笔记(一) python基础
- python学习笔记一(python 编码)
- python学习笔记(一)
- Python学习笔记(一)
- python学习笔记(一)
- python学习笔记(一)
- python学习笔记(一)
- python学习笔记(一)
- Python学习笔记(一)
- Python学习笔记(一)
- python学习笔记(一)
- Python学习笔记(一)
- python学习笔记(一)
- Python学习笔记(一)
- python Tkinter图形用户界面组件(Entry,Button)一
- python Tkinter图形用户界面组件(布局管理器) 二
- MongoDB学习笔记(五) MongoDB文件存取操作
- python Tkinter图形用户界面组件(布局管理器) 三
- 装饰器思想 由python联想到javascript
- python Pyro(python中的RMI)学习笔记一
- python Pyro(python中的RMI)学习笔记
- 人工智能领域的会议和期刊
- python 多线程之信号机Semaphore、事件Event
- java 对象序列化
- python 与网站交互(simple,can't deal with javascript)
- 软件测试
- python 找到近似的最短路径
- python 一个小小的性能提升