python编程(再述rpc)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


    rpc作为pc之间通信的工具,极大地提高了我们运行的速率和方法。一般来说,如果rpc和fabric、supervisor配合使用的话,会给我们的工作带来极大地方便。此外,很多同学喜欢用多进程代替多线程,我想这其中除了多进程可以防止服务终止之外,另外一个原因就是多进程可以有效地扩展为分布式系统。这一点对于那些业务量比较大的公司来说,还是很有吸引力的。


    之前,我们也写过rpc的代码。但是,原来rpc的操作都是基于twisted库,很多同学未必了解这个库。其实python本身也提供了rpc的基本操作。英文好一点的同学可以看这份在线文档,上面说的很清楚。当然希望快速上手的同学,可以看看下面的代码。它的server是这么写的,

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)

# Register a function under a different name
def adder_function(x,y):
    return x + y
server.register_function(adder_function, 'add')

# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
    def div(self, x, y):
        return x // y

server.register_instance(MyFuncs())

# Run the server's main loop
server.serve_forever()

    server代码中主要就是注册了pow、adder_function、MyFuncs这三部分的内容,其他的就没有啥了。

import xmlrpclib

s = xmlrpclib.ServerProxy('http://localhost:8000')
print s.pow(2,3)  # Returns 2**3 = 8
print s.add(2,3)  # Returns 5
print s.div(5,2)  # Returns 5//2 = 2

# Print list of available methods
print s.system.listMethods()
    client部分的内容就更简单了,主要就是使用server提供的几个函数。其实大家可以反过来看。如果我们想自己写一个分布式系统,那么完全可以采用多server+client的形式来完成。按照这种模式,如果client希望server执行某种工作,可以先upload代码到server处,请server重新reload,接着就按照需求请求server来处理了。当然,如果在本地测试这个多server+client的分布式代码,只需要将分布式的ip注册成为不同的端口就可以了,道理其实是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值