Tornado/Python 学习笔记(一)

1.源代码下载及安装:http://www.tornadoweb.org/en/stable/

2.python中xmlrpc库官方文档:https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc

3.xml介绍与学习:http://www.w3school.com.cn/xml/xml_intro.asp

  XML 被设计为传输和存储数据,其焦点是数据的内容。

  HTML 被设计用来显示数据,其焦点是数据的外观。

  HTML 旨在显示信息,而 XML 旨在传输信息。

python类库xmlrpc的使用

一、简介

XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module supports writing XML-RPC client code; it handles all the details of translating between conformable Python objects and XML on the wire.

简单地,client可以调用server上提供的方法,然后得到执行的结果。类似于webservice。

为了解决在系统的80端口提供RPC的服务,而又不影响正在执行的WEB服务,人们想出了用HTTP协议传输RPC包的办法。对于几乎是专门用于传输文本的HTTP协议,要在其上传输RPC封包,最方便的方法莫过于把RPC封包编码成文本形式——例如XML文件。
XML- RPC(http://www.xml-rpc.com)是由美国UserLand公司指定的一个RPC协议。它将RPC信息封包编码为XML,然后通过 HTTP传输封包;
简单的理解:

将数据定义为xml格式,通过http协议进行远程传输

二、好处

1. 传输复杂的数据。

2. 通过程序语言的封装,实现远程对象的调用。

三、Python中xmlrpc应用

服务端:

 1 import calendar, SimpleXMLRPCServer
 2 #The server object
 3 class Calendar:
 4     def getMonth(self, year, month):
 5         return calendar.month(year, month)
 6     def getYear(self, year):
 7         return calendar.calendar(year)
 8
 9 calendar_object = Calendar()
10 server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 7788))
11 server.register_instance(calendar_object)
12 #Go into the main listener loop
13 print "Listening on port 7788"
14 server.serve_forever()

客户端:

import xmlrpclib
server = xmlrpclib.ServerProxy("http://localhost:7788")
month = server.getMonth(2002, 8)
print month

执行结果:

August 2002
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

PS1:以上代码的python环境为 python2.6,需要注意端口的使用情况,如果程序中使用的端口已经被占用会报错。

当运行服务端的程序后,执行命令:netstat -an|grep 7788,显示以下信息:
127.0.0.1.7788             *.*                0      0 128000      0 LISTEN

PS2:SimpleXMLRPCServer是一个单线程的服务器。这意味着,如果几个客户端同时发出多个请求,其它的请求就必须等待第一个请求完成以后才能继续。

这里有个技巧解决这个问题:

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SocketServer import ThreadingMixIn
class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass

现在把服务端改一改:

svr=ThreadXMLRPCServer(("", 8080), allow_none=True)

现在服务器就支持多线程并发了。

来源 -- http://blog.chinaunix.net/uid-20544356-id-132398.html

服务端:

 1 from xmlrpc.server import SimpleXMLRPCServer
 2 from xmlrpc.server import SimpleXMLRPCRequestHandler
 3
 4 def div(x,y):
 5     return x - y
 6
 7 class Math:
 8     def _listMethods(self):
 9         # this method must be present for system.listMethods
10         # to work
11         return [‘add‘, ‘pow‘]
12     def _methodHelp(self, method):
13         # this method must be present for system.methodHelp
14         # to work
15         if method == ‘add‘:
16             return "add(2,3) => 5"
17         elif method == ‘pow‘:
18             return "pow(x, y[, z]) => number"
19         else:
20             # By convention, return empty
21             # string if no help is available
22             return ""
23     def _dispatch(self, method, params):
24         if method == ‘pow‘:
25             return pow(*params)
26         elif method == ‘add‘:
27             return params[0] + params[1]
28         else:
29             raise ‘bad method‘
30
31 server = SimpleXMLRPCServer(("localhost", 8000))
32 server.register_introspection_functions()
33 server.register_function(div,"div")
34 server.register_function(lambda x,y: x*y, ‘multiply‘)
35 server.register_instance(Math())
36 server.serve_forever()

客户端:

 1 import xmlrpc.client
 2
 3 s = xmlrpc.client.ServerProxy(‘http://localhost:8000‘)
 4
 5 print(s.system.listMethods())
 6
 7 print(s.pow(2,3))  # Returns 8
 8 print(s.add(2,3))  # Returns 5
 9 print(s.div(3,2))  # Returns 1
10 print(s.multiply(4,5)) # Returns 20

执行结果:

[‘add‘, ‘div‘, ‘multiply‘, ‘pow‘, ‘system.listMethods‘, ‘system.methodHelp‘, ‘system.methodSignature‘]
8
5
1
20

PS1:以上代码的python环境为 python3.2

Tornado/Python 学习笔记(一)

时间: 2024-08-29 00:30:49

Tornado/Python 学习笔记(一)的相关文章

Tornado/Python 学习笔记(二)

部分ssrpc.py代码分析 -- 服务端: 1 #!/usr/bin/python3 2 3 from xmlrpc.client import Fault, dumps, loads 4 import sys 5 from socketserver import ForkingMixIn 6 from xmlrpc.server import SimpleXMLRPCServer 7 8 class VerboseFaultXMLRPCServer(SimpleXMLRPCServer):

python学习笔记目录

人生苦短,我学python学习笔记目录:week1 python入门 week2 python基础week3 python进阶week4 python高阶week5 python数据结构与算法week6 网络编程week7 数据库技术之入门week8 数据库技术之MySQL和redis和mongodbweek9 前端技术之HTML和CSSweek10 前端技术之JavaScript和DOMweek11 前端框架之jQueryweek12 前端框架之bootstrapweek13 网络框架之入门w

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以