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

转载于:https://www.cnblogs.com/fendou-999/p/3844827.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-aop-annotation

1。假设你已经配好依赖注入那一块。此时的bean.xml为 <?xml version"1.0" encoding"UTF-8"?><beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:cont…

c++实现简单线程池代码

目录完整代码TaskPool.cppTaskPool.hmain.cpp完整代码 TaskPool.cpp // // Created by LENOVO on 2021/10/25. //#include "TaskPool.h" #include <functional>std::mutex printMutex;TaskPool::TaskPool() : m_bRunning(false) {}TaskPool::~TaskPool() {re…

Android静态图片人脸识别的完整demo(附完整源码)

Demo功能&#xff1a;利用android自带的人脸识别进行识别&#xff0c;标记出眼睛和人脸位置。点击按键后进行人脸识别&#xff0c;完毕后显示到imageview上。 第一部分&#xff1a;布局文件activity_main.xml [html] view plaincopyprint?<RelativeLayout xmlns:android&qu…

图论:最短路径搜索--Dijkstra算法(c代码实现)

最近因为辞职&#xff0c;有不少闲功夫&#xff0c;重温下数据结构&#xff0c;顺便练练手。今天说说最短路径搜索算法中的Dijkstra原理和实现。 一&#xff1a;简介 这个算法用于解决图中单源最短路径问题。所谓单源节点是指给定源节点&#xff0c;求图中其它节点到此源节点的…

C++多线程快速入门(五)简单线程池设计

目录设计思路主线程运行逻辑task以及taskpool设计详细流程讲解完整代码打印结果往期回顾设计思路 线程池实际上就是一组线程&#xff0c;当我们需要异步执行一些任务时&#xff0c;经常要通过OS频繁创建和销毁线程&#xff0c;不如直接创建一组在程序生命周期内不会退出的线程…

C--函数

函数:具有特定功能的代码段,分为库函数,自定义函数. 函数定义: 函数返回值类型 函数名(形式参数列表) { 代码段; return 返回值; } 注意:每个函数返回值最多只有一个.return是一个函数结束的标志. 形式参数(形参):函数定义时使用的虚拟参数名,用以接收函数调用是传递过来的实际…

公式系统 - TradeBlazer公式基础 - Bar数据

Bar数据 在介绍Bar数据之前&#xff0c;首先&#xff0c;我们需要讨论一下TradeBlazer公式的计算方法&#xff0c;针对上面介绍的各种公式类型&#xff0c;包含公式应用&#xff0c;在公式进行计算时&#xff0c;都是建立在基本数据源(Bar数据)之上&#xff0c;我们这里所谓的B…

C++网络编程快速入门(一):TCP网络通信基本流程以及基础函数使用

目录流程概述服务器端代码实现客户端代码实现函数和结构讲解sockaddr_in和sockaddrsocket &#xff1a; 创建一个socket连接bind &#xff1a;绑定地址以及端口号问题流程概述 客户端与服务器之间的网络通信基本原理如下所示&#xff0c;复杂一点的架构可能会添加消息中间件。…

php 字符串处理

addcslashes — 为字符串里面的部分字符添加反斜线转义字符addslashes — 用指定的方式对字符串里面的字符进行转义bin2hex — 将二进制数据转换成十六进制表示chop — rtrim() 的别名函数chr — 返回一个字符的ASCII码chunk_split — 按一定的字符长度将字符串分割成小块conve…

使用前端框架Foundation 4来帮助简化响应式设计开发

日期&#xff1a;2013-3-12 来源&#xff1a;GBin1.com Foundation是一套使用广泛的前端开发套件&#xff0c;可以帮助你快速的网站。最近ZURB发布了一个新版本的Foundation 4前端框架&#xff0c;能够有效的帮助你快速的开发响应式的网站。 和另外一个套知名的前端框架BootSt…

C++网络编程快速入门(二):Linux下使用select演示简单服务端程序

目录select参数解释select使用规范select使用缺点基本流程实例代码通信效果演示往期文章select参数解释 extern int select (int __nfds, fd_set *__restrict __readfds,fd_set *__restrict __writefds,fd_set *__restrict __exceptfds,struct timeval *__restrict __timeout)…

Android转载一:Android文件命名规范

REF&#xff1a;http://blog.csdn.net/gulianchao/article/details/23391651 (一) Layout命名 1&#xff0e;contentview命名&#xff1a;activity_功能模块.xml 例如&#xff1a;activity_main.xml、activity_more.xml 2&#xff0e;Dialog命名&#xff1a;dialog_描述.xml …

[转]XBRL应用软件分类

1) 分类标准编辑软件(Taxonomy editor)&#xff1a; 分类标准是XBRL技术的应用基础&#xff0c;每一个采用XBRL技术的国家都必须先按各国的GAAP制订XBRL分类标准&#xff0c;上市公司才能据以编制实例文件。由于一套XBRL 2.0或2.1版分类标准必须包含至少一份XML Schema文…

C++网络编程快速入门(三):阻塞与非阻塞式调用网络通信函数

目录阻塞与非阻塞定义send与recvconnect一些问题为什么要将监听socket设置为非阻塞阻塞与非阻塞定义 阻塞模式指的是当前某个函数执行效果未达预期&#xff0c;该函数会阻塞当前的执行线程&#xff0c;程序执行流在超时时间到达或者执行成功后恢复原有流程。非阻塞模式相反&am…

css3实现头像旋转360度

css样式: .div a img{ width: 88px; height: 88px; border-radius: 88px; transition: all 1.2s ease-out 0s;}.div a img:hover{ -webkit-transform:rotate(360deg); -moz-transform:rotate(360deg); -o-transform:rotate(360deg); -ms-transform:rotate(360deg); transform:r…

POJ 2488 深搜

POJ 2488 深搜 要求字典序的顺序。 1 #include <iostream>2 #include <stdio.h>3 #include <string.h>4 using namespace std;5 int n,m,cnt;6 bool success;7 bool sign[30][30];8 int step[30][2];9 int dir[8][2]{ 10 -2,-1,-2,1, 11 …

socket 端口和地址复用

https://blog.csdn.net/weibo1230123/article/details/79978745 https://blog.csdn.net/weixin_42157432/article/details/115560824 在linux socket网络编程中&#xff0c;大规模并发TCP或UDP连接时&#xff0c;经常会用到端口复用&#xff1a; int opt 1; if (setsockopt…

MyEclipse老是弹出problem occurred窗口

有的时候是因为jsp页面中的java脚本有误&#xff0c;比如说<% String name"";>就会出现错误&#xff0c;因为结束标签少了一个百分号&#xff05;。转载于:https://www.cnblogs.com/passer1991/archive/2013/03/15/2961624.html

C++网络编程快速入门(四):EPOLL模型使用

目录基本使用方法step1:创建epollfdstep2:将fd绑定到epollfdstep3:调用epoll_wait检测事件epoll_wait与poll、select区别所在水平触发与边缘触发基本使用方法 step1:创建epollfd 创建一个epollfd&#xff0c;若epoll_create调用成功&#xff0c;则返回一个非负值的epollfd&am…

Mysql中代替like模糊查询的一种方法

使用Mysql的函数instr,可代替传统的like方式查询,并且速度更快。 instr函数&#xff0c;第一个参数是字段&#xff0c;第二个参数是要查询的串&#xff0c;返回串的位置&#xff0c;第一个是1&#xff0c;如果没找到就是0. 例如&#xff1a; select username from prefix_user …