首页 > 编程语言 >python实现rpc

python实现rpc

时间:2023-08-25 20:13:28浏览次数:51  
标签:__ zerorpc python self 实现 rpc time print data

RPC(Remote Procedure Call) 是指远程过程调用,也就是说两台服务器 A,B 一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据

为什么要用 RPC

就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用

python实现rpc

内置

SimpleXMLRPCServer

from xmlrpc.server import SimpleXMLRPCServer

# 服务端
# 通信使用xml格式
class RPCServer(object):

    def __init__(self):
        super(RPCServer, self).__init__()
        print(self)
        self.send_data = 'lqz nb'
        self.recv_data = None

    def getObj(self):
        print('get data')
        return self.send_data

    def sendObj(self, data):
        print('send data')
        self.recv_data = data
        print(self.recv_data)
        return '收到了'+data


# SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost', 4242), allow_none=True)
server.register_introspection_functions()
server.register_instance(RPCServer())
server.serve_forever()
import time
from xmlrpc.client import ServerProxy

# 客服端
# SimpleXMLRPCServer
def xmlrpc_client():
    print('xmlrpc client')
    c = ServerProxy('http://localhost:4242')

    # res=c.getObj()
    # print(res)
    # res=c.sendObj('xxx')
    # print(res)

    data = 'lqz nb'
    start = time.time()
    for i in range(500):
        a=c.getObj()
        print(a)
    for i in range(500):
        c.sendObj(data)
    print('xmlrpc total time %s' % (time.time() - start))

if __name__ == '__main__':
    xmlrpc_client()

zeroRpc

pip install zerorpc

import zerorpc
import time
# zerorpc
def zerorpc_client():
    print('zerorpc client')
    c = zerorpc.Client()
    c.connect('tcp://127.0.0.1:4243')
    data = 'lqz nb'

    start = time.time()
    for i in range(500):
        a=c.getObj()
        print(a)
    for i in range(500):
        c.sendObj(data)

    print('total time %s' % (time.time() - start))


if __name__ == '__main__':
    zerorpc_client()
import zerorpc

class RPCServer(object):

    def __init__(self):
        super(RPCServer, self).__init__()
        print(self)
        self.send_data = 'lqz nb'
        self.recv_data = None

    def getObj(self):
        print('get data')
        return self.send_data

    def sendObj(self, data):
        print('send data')
        self.recv_data = data
        print(self.recv_data)
# zerorpc
s = zerorpc.Server(RPCServer())
s.bind('tcp://0.0.0.0:4243')
s.run()

标签:__,zerorpc,python,self,实现,rpc,time,print,data
From: https://www.cnblogs.com/yangyucai/p/17657813.html

相关文章

  • [Lua] 实现所有类的基类Object、模拟单继承OO、实现抽象工厂
    所有类的基类ObjectLua没有严格的oo(Object-Oriented)定义,可以利用元表特性来实现先定义所有类的基类,即Object类。代码顺序从上到下,自成一体。完整代码定义一个空表Object,__index指向其自身(继承将直接使用该表作为对象的元表)Object={}Object.__index=Objectnew定......
  • 翻译python keyboard模块的说明文档
    之前有介绍过全局热键keyboard库,简略介绍了它的使用.为全面了解,我把其说明文档翻译了一下,如下(中英文对照):Thisprojectiscurrentlyunmaintained.Itworksformanycases,andIwishtopickitupagaininthefuture,butyoumightencountersomefrictionan......
  • python练习题01 碱基统计
     001、测试序列,碱基序列保存只a.fa文件中,统计下面这段序列中A、C、G、T碱基的个数[root@PC1test01]#lsa.fa[root@PC1test01]#cata.fa##测试fasta文件AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC 002、利用基本循环统计[ro......
  • 实现Fegin最佳实践
              ......
  • Ajax是如何实现前后端交互的?
    Ajax的原理:ajax一个前后台配合的技术,它可以让javascript发送http请求,与后台通信,获取数据和信息。ajax技术的原理是实例化xml,http对象,使用此对象与后台通信。jquery将它封装成了一个函数$.ajax(),我们可以直接用这个函数来执行ajax请求。这个对象为向服务器发送请求和解析服务器响......
  • Python数据类型
    Python数据类型字符串(str)字符串是Python中最常用的数据类型。我们可以使用引号('或"或''')来创建字符串。创建字符串很简单,只要为变量分配一个值即可。var1='HelloWorld!'var2="PythonRunoob"字符串的截取的语法格式:变量[头下标:尾下标]str='Runoo......
  • 使用MediatR和FluentValidation实现CQRS应用程序的数据验证
    本文将重点介绍如何通过MediatR的管道功能将FluentValidation集成到项目中实现验证功能。什么是CQRS?CQRS(CommandQueryResponsibilitySegregation)也叫命令查询职责分离,是近年来非常流行的应用程序架构模式。CQRS背后的理念是在逻辑上将应用程序的流程分成两个独立的流程,即命......
  • 【C#】【Windows 窗体应用】TextBox 的多行实现换行
    1.设置TextBox空间允许多行: this.textBox1.Multiline=true;  2.换行字符是使用"\r\n"。1textBox1.Text+="第0行\r\n";2textBox1.Text+="第1行\r\n";3textBox1.Text+="第2行\r\n";4textBox1.Text+="第3行\r\n";5......
  • 无涯教程-Python - 模块语句
    模块使您可以逻辑地组织Python代码。将相关代码分组到一个模块中可以使代码更易于理解和使用。名为aname的模块的Python代码通常位于名为aname.py的文件中。这是一个简单模块support.py的示例defprint_func(par):print"Hello:",parreturnImport语句您可......
  • centos7实现开机自启动Python脚本
    在Linux系统中,你可以使用不同的方法来实现开机自启动Python脚本和确保守护进程不挂掉。以下是一些常用的方法:1.开机自启动Python脚本:使用rc.local文件(适用于一些旧的系统):编辑/etc/rc.local文件,将你希望在系统启动时运行的命令或脚本添加到文件中。确保给脚本提供正确的路径。......