RPyC(Remote Python Call ) 是一个 Python 的库用来实现 RPC 和分布式计算的工具。支持同步和异步操作、回调和远程服务以及透明的对象代理。
使用rpyc编写c/s结构程序,完全不用考虑老式的socket编程,现在只用编写简单的3、5行代码即可完成以前的数千行代码的功能。
在实际应用中用的比较多的有两种,一种是调用远端的模块,另外一种是调用远端的函数。
以简单实例讲解:
# coding:utf-8
from rpyc.core.service import SlaveService
from rpyc.utils.server import ThreadedServer
# SlaveService是一种允许客户端任意的调用服务器端的模块和代码的服务
server = ThreadedServer(SlaveService, auto_register=False, hostname = 'localhost', port=9999)
server.start()
conn = rpyc.classic.connect('localhost', 9999)
# 客户端调用模块可以有两种方法,一种是点运算符,一种是中括号;
# 在某些情形下(如selenium的__init__文件中没有子模块webdriver的路径),
# 无法通过点运算符调用,但可以使用[' selenium.webdriver']的形式
path = conn.modules.sys.path
from rpyc import Service
from rpyc.utils.serverimport ThreadedServer
class TestService(Service):
# 对于服务端来说, 只有以"exposed_"打头的方法才能被客户端调用,所以要提供给客户端的方法都得加"exposed_"
defexposed_test(self, num):
return1+num
sr = ThreadedServer(TestRpyc, port=9999, auto_register=False)
sr.start()
# 参数主要是host, port
conn =rpyc.connect('localhost',9999)
# test是服务端的那个以"exposed_"开头的方法
cResult =conn.root.test(11)
conn.close()
print cResult
其它rpyc详细看官网文档:http://rpyc.wikidot.com/
使用rpyc编写c/s结构程序,完全不用考虑老式的socket编程,现在只用编写简单的3、5行代码即可完成以前的数千行代码的功能。
在实际应用中用的比较多的有两种,一种是调用远端的模块,另外一种是调用远端的函数。
以简单实例讲解:
远端模块的调用:
服务器端:
# coding:utf-8
from rpyc.core.service import SlaveService
from rpyc.utils.server import ThreadedServer
# SlaveService是一种允许客户端任意的调用服务器端的模块和代码的服务
server = ThreadedServer(SlaveService, auto_register=False, hostname = 'localhost', port=9999)
server.start()
客户端:
import rpycconn = rpyc.classic.connect('localhost', 9999)
# 客户端调用模块可以有两种方法,一种是点运算符,一种是中括号;
# 在某些情形下(如selenium的__init__文件中没有子模块webdriver的路径),
# 无法通过点运算符调用,但可以使用[' selenium.webdriver']的形式
path = conn.modules.sys.path
driver = conn.modules['selenium.webdriver'].Firefox()
注意:第二种调用方式后面没有点运算符
远端函数的调用:
服务端:
# coding:utf-8from rpyc import Service
from rpyc.utils.serverimport ThreadedServer
class TestService(Service):
# 对于服务端来说, 只有以"exposed_"打头的方法才能被客户端调用,所以要提供给客户端的方法都得加"exposed_"
defexposed_test(self, num):
return1+num
sr = ThreadedServer(TestRpyc, port=9999, auto_register=False)
sr.start()
客户端:
# coding:utf-8
# 参数主要是host, port
conn =rpyc.connect('localhost',9999)
# test是服务端的那个以"exposed_"开头的方法
cResult =conn.root.test(11)
conn.close()
print cResult
其它rpyc详细看官网文档:http://rpyc.wikidot.com/