RPC 的 Python 实现 ToRPC

ToRPC 详细介绍

ToRPC(Tornado + RPC) 是一个的基于 Tornado IOLoop 的异步TCP和双向通信的RPC的Python实现。ToRPC非常轻量级,性能优秀(尤其是在PyPy环境下)。

注意:目前为止,ToRPC只在CPython 2.7+和PyPy 2.5+上测试过。

示例

RPC 服务器

from tornado import ioloop
from torpc import RPCServer
server = RPCServer(('127.0.0.1', 5000))

@server.service.register()
def echo(x):
    return x

server.start()
ioloop.IOLoop.instance().start()

RPC 客户端

from tornado import ioloop, gen
from torpc import RPCClient

def result_callback(f):
    print(f.result())

@gen.coroutine
def using_gen_style():
    want_to_say = 'way to explore'
    ret = yield rc.call('echo', want_to_say)
    assert ret == want_to_say
    print('gen_style complete')

rc = RPCClient(('127.0.0.1', 5000))
rc.call('echo', 'hello world', callback=result_callback)
future = rc.call('echo', 'code for fun')
future.add_done_callback(result_callback)
using_gen_style()
ioloop.IOLoop.instance().start()

更多请浏览examples。

Performance

系统: CentOS 6.6 x64

处理器: Intel i5-3470 3.20GHz

内存: 8 GB 1600 MHz DDR3

Python: 2.7.10 PyPy: 4.0.0

这个基准测试中,Python循环10w次,PyPy循环50w次,然后运行3次, 结果在gist:benchmark_result.txt

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2024-10-25 21:10:50

RPC 的 Python 实现 ToRPC的相关文章

Python中实现远程调用(RPC、RMI)简单例子_python

远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI). RPC RPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有XML.JSON.序列化数据等.在此,用python做一个xml-rpc的示例. 先给服务器端server.py: 复制代码 代码如下: from SimpleXMLRPCServer import S

Python用rpc实现分布式系统调用的原理及实例

rpc概念? rpc 一般俗称,远程过程调用,把本地的函数,放到远端去调用. 通常我们调用一个方法,譬如: sumadd(10, 20),sumadd方法的具体实现要么是用户自己定义,要么存在于该语言的库函数中,也就说在sumadd方法的代码实现在本地,它是一个本地调用! "远程调用"意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个地方(分布到各个服务器),但是用起来像是在本地. rpc远程调用原理 : 比如 A调用B提供的remoteAdd方法: 首先A与B之间建立一个

mprpc —— 高性能的 Python RPC 开发库

mprpc 详细介绍mprpc 是一个轻量级的 MessagePack RPC 远程方法调用库.你可以用它来轻松构建一个分布式的服务器端系统,只需要少量代码,基于 gevent 和 MessagePack 开发. 服务器端: from gevent.server import StreamServer from mprpc import RPCServer class SumServer(RPCServer): def sum(self, x, y): return x + y server =

你想找的Python资料这里全都有!没有你找不到!史上最全资料合集

GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志.代码分析等.在给大家分享之前呢,小编推荐一下一个挺不错的交流宝地,里面都是一群热爱并在学习Python的小伙伴们,大几千了吧,各种各样的人群都有,特别喜欢看到这种大家一起交流解决难题的氛围,群资料

用Python编写网络爬虫(五):urllib2的使用细节与抓站技巧

前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理Demo: import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'http

用python socket实现LVS自动权衡调整及监控管理

和朋友一起搞定了这个应用~  以前是用shell写的,方法比较二,而且性能不好,因为公司有更好的解决方案,所以这个方法也就可以分享出来了> 一个用python来监控 lvs的调度情况,根据后端服务器负载的情况,来实现lvs权衡负载 因为每个人的环境不一样,最好是看下代码,多方面测试再用~ 这个程序需设置一个阈值,在lvs端运行server.py 在realserver运行client.py . 后端的服务器会把当前的负载情况,利用socket的方式发送给 LVS端, 随之LVS端会检查 ipvs

python的multiprocessing多进程通信的pipe和queue介绍

python的multiprocessing提供了IPC(Pipe和Queue),使Python多进程并发,效率上更高.本文我们就来详细介绍一下pipe和queue.     这两天温故了python的multiprocessing多进程模块,看到的pipe和queue这两种ipc方式,啥事ipc? ipc就是进程间的通信模式,常用的一半是socke,rpc,pipe和消息队列等. 今个就再把pipe和queue搞搞. 代码如下   #coding:utf-8 import multiproce

15个最受欢迎的Python开源框架

我们从GitHub中整理出了15个最受欢迎的Python开源框架,这些框架包括事件I/O.OLAP.Web开发.高性能网络通信.测试.爬虫等. 1. Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. 2. Diesel:基于Greenlet的事件I/O框架 Di

Python标准库urllib2的一些使用细节总结_python

Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 的使用细节. 1.Proxy 的设置 2.Timeout 设置 3.在 HTTP Request 中加入特定的 Header 4.Redirect 5.Cookie 6.使用 HTTP 的 PUT 和 DELETE 方法 7.得到 HTTP 的返回码 8.Debug Log Proxy 的设置 urllib2 默认会使用