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.pswp.cn/news/376826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376826.shtml
英文地址,請注明出處:http://en.pswp.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 …