欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法

 更新時(shí)間:2019年01月11日 14:20:56   作者:comprel  
今天小編就為大家分享一篇python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

RPC(Remote Procedure Call Protocol)是遠(yuǎn)程調(diào)用協(xié)議,它通過網(wǎng)絡(luò)請(qǐng)求服務(wù)到遠(yuǎn)端服務(wù)器,服務(wù)器根據(jù)請(qǐng)求做出響應(yīng),將結(jié)果返回

它是一種C/S模式,客戶端可以調(diào)用遠(yuǎn)程服務(wù)器上的參數(shù)(類似URL)并返回結(jié)果

利用rpc可以實(shí)現(xiàn)系統(tǒng)的分布式架構(gòu),可以將功能分解到多臺(tái)服務(wù)器上進(jìn)行實(shí)現(xiàn),同時(shí)也將也可以將負(fù)載打散,分布到不同服務(wù)器上,整合計(jì)算資源

在openstack中就大量使用了rpc

rpc多使用http傳輸請(qǐng)求,格式有xml,json等,這里是xml

模塊:

xmlrpclib

注:xmlrpclib模塊在python3中重命名為xmlrpc.client

xmlrpc并不是很安全,但在2.7.9 https url中默認(rèn)加入了證書,主機(jī)名驗(yàn)證

定義:

class xmlrpclib.ServerProxy(uri[, transport[, encoding[, verbose[, allow_none[, use_datetime[, context]]]]]])

1.uri,即服務(wù)端的url地址

2.transport 傳輸實(shí)例,可選,https urls/http

3.encoding

4.verbose 是debug模式

5.allow_none 是否請(qǐng)求空 ,若為True,那么常量none將被翻譯成xml,默認(rèn)如果是none則拋出異常 TypeError

6.use_datetime 可以使用date/time values記錄調(diào)用時(shí)間datetime.datetime,默認(rèn)是false

ServerProxy對(duì)象提供一些默認(rèn)的方法:

1.ServerProxy.system.listMethods() 返回遠(yuǎn)端服務(wù)器方法列表

2.ServerProxy.system.methodSignature(name) 方法簽名,是一個(gè)數(shù)組類型

3.ServerProxy.system.methodHelp(name) 方法幫助信息

例如一個(gè)簡單的示例:

服務(wù)端:

import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer

def get_power(n,m):
 return n**m

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service get power on 0.0.0.0 8081..."
server.register_function(get_power, "get_power")
server.serve_forever()

客服端:

import xmlrpclib

server_power = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
print "3**2 = %d" %(server_power.get_power(3,2))
print "2**5 = %d" %(server_power.get_power(2,5))

結(jié)果:

服務(wù)端:

# python xml_server.py 
start service get power on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -
192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -

客服端:

# python xml_client.py 
3**2 = 9
2**5 = 32

xmlrpclib提供的一些方法:

class xmlrpclib.DateTime 時(shí)間對(duì)象

例如:

服務(wù)端:

import datetime
from SimpleXMLRPCServer import SimpleXMLRPCServer
import xmlrpclib

def today():
 today = datetime.datetime.today()
 return xmlrpclib.DateTime(today)

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service on 0.0.0.0 8081..."
server.register_function(today, "today")
server.serve_forever()

客服端:

import xmlrpclib
import datetime

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")

today = s.today()
converted = datetime.datetime.strptime(today.value, "%Y%m%dT%H:%M:%S")
print "Today: %s" % converted.strftime("%d.%m.%Y, %H:%M")

結(jié)果:

服務(wù)端

# python rpc_time.py 
start service on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:43:19] "POST / HTTP/1.1" 200 -

客服端:

# python rpc_time_client.py 
Today: 22.05.2017, 10:43

2.class xmlrpclib.Binary 二進(jìn)制對(duì)象

3.class xmlrpclib.Fault fault對(duì)象

如:

客服端:

import xmlrpclib

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
try:
 s.add(2, 5)
except xmlrpclib.Fault as err:
 print "A fault occurred"
 print "Fault code: %d" % err.faultCode
 print "Fault string: %s" % err.faultString

class xmlrpclib.MultiCall(server) 提供多個(gè)調(diào)用,復(fù)合調(diào)用:

例如:

from SimpleXMLRPCServer import SimpleXMLRPCServer

def add(x,y):
 return x+y

def subtract(x, y):
 return x-y

def multiply(x, y):
 return x*y

def divide(x, y):
 return x/y

def get_power(n,m):
 return n**m

server = SimpleXMLRPCServer(("0.0.0.0", 8081))
print "start service on 0.0.0.0 8081..."

server.register_multicall_functions()
server.register_function(add, 'add')
server.register_function(subtract, 'subtract')
server.register_function(multiply, 'multiply')
server.register_function(divide, 'divide')
server.register_function(get_power, 'get_power')
server.serve_forever() 

客服端:

import xmlrpclib

s = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")
multicall = xmlrpclib.MultiCall(s)
multicall.add(7,3)
multicall.subtract(7,3)
multicall.multiply(7,3)
multicall.divide(7,3)
multicall.get_power(7,3)
result = multicall()

print "7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d 7**3=%d" % tuple(result)

服務(wù)端:

# python mul_xmlserver.py 
start service on 0.0.0.0 8081...

192.168.137.9 - - [22/May/2017 10:51:59] "POST / HTTP/1.1" 200 -

客服端:

# python mul_xmlclient.py 
7+3=10, 7-3=4, 7*3=21, 7/3=2 7**3=343

另外xmlrpc還提供有比較快捷的函數(shù):

1.xmlrpclib.boolean(value) 將任意的python值轉(zhuǎn)換成xmlrpc的布爾類型True/False

2.xmlrpclib.dumps(params[, methodname[, methodresponse[, encoding[, allow_none]]]])

params請(qǐng)求轉(zhuǎn)換為xml

3.xmlrpclib.loads(data[, use_datetime])

將一個(gè)xml-rpc的請(qǐng)求轉(zhuǎn)換成python對(duì)象

例如:

from xmlrpclib import ServerProxy, Error

server = ServerProxy("http://betty.userland.com")

print server

try:
 print server.examples.getStateName(41)
except Error as err:
 print "ERROR", err

客服端:

import xmlrpclib, httplib

class ProxiedTransport(xmlrpclib.Transport):
 def set_proxy(self, s):
  self.s = s

 def make_connection(self, host):
  self.realhost = host
  h = httplib.HTTPConnection(self.s)
  return h

 def send_request(self, connection, handler, request_body):
  connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))

 def send_host(self, connection, host):
  connection.putheader('Host', self.realhost)

p = ProxiedTransport()
p.set_proxy('proxy-server:8080')
server = xmlrpclib.ServerProxy('http://time.xmlrpc.com/RPC2', transport=p)
print server.currentTime.getCurrentTime()

以上這篇python遠(yuǎn)程調(diào)用rpc模塊xmlrpclib的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python break語句詳解

    Python break語句詳解

    這篇文章主要介紹了Python break語句的作用、使用方法,需要的朋友可以參考下
    2014-03-03
  • Python處理session的方法整理

    Python處理session的方法整理

    這篇文章主要介紹了Python處理session的方法以及相關(guān)知識(shí)點(diǎn)總結(jié),有需要的朋友們學(xué)習(xí)下。
    2019-08-08
  • 跟老齊學(xué)Python之用while來循環(huán)

    跟老齊學(xué)Python之用while來循環(huán)

    while,翻譯成中文是“當(dāng)...的時(shí)候”,這個(gè)單詞在英語中,常常用來做為時(shí)間狀語,while ... someone do somthing,這種類型的說法是有的。
    2014-10-10
  • Python函數(shù)參數(shù)類型及排序原理總結(jié)

    Python函數(shù)參數(shù)類型及排序原理總結(jié)

    這篇文章主要介紹了Python函數(shù)參數(shù)類型及排序原理總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python中Parser的用法小結(jié)

    Python中Parser的用法小結(jié)

    argparse 模塊還會(huì)自動(dòng)生成幫助和使用手冊(cè),并在用戶給程序傳入無效參數(shù)時(shí)報(bào)出錯(cuò)誤信息,本文給大家介紹Python中Parser的用法小結(jié), 感興趣的朋友一起看看吧
    2023-12-12
  • python使用urllib2模塊獲取gravatar頭像實(shí)例

    python使用urllib2模塊獲取gravatar頭像實(shí)例

    python使用urllib2模塊獲取gravatar頭像的實(shí)例,大家參考使用吧
    2013-12-12
  • python中queue.Queue之task_done的用法

    python中queue.Queue之task_done的用法

    這篇文章主要介紹了python中queue.Queue之task_done的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • PyTorch 對(duì)應(yīng)點(diǎn)相乘、矩陣相乘實(shí)例

    PyTorch 對(duì)應(yīng)點(diǎn)相乘、矩陣相乘實(shí)例

    今天小編就為大家分享一篇PyTorch 對(duì)應(yīng)點(diǎn)相乘、矩陣相乘實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python在centos7.6上安裝python3.9的詳細(xì)教程(默認(rèn)python版本為2.7.5)

    Python在centos7.6上安裝python3.9的詳細(xì)教程(默認(rèn)python版本為2.7.5)

    這篇文章主要介紹了Python在centos7.6上安裝python3.9(默認(rèn)python版本為2.7.5)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-10-10
  • python實(shí)現(xiàn)畫循環(huán)圓

    python實(shí)現(xiàn)畫循環(huán)圓

    今天小編就為大家分享一篇python實(shí)現(xiàn)畫循環(huán)圓,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評(píng)論