版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Python自動化開發(fā)
Day5AlexLi|simpleisgood|2015/06/06小日本上節(jié)回顧裝飾器異常處理面向?qū)ο缶幊探榻B類的使用第一個面向?qū)ο蟪绦蜃宇惖睦^承程序練習(xí)捨遺:面向?qū)ο蟮奶匦允澜缛f物,皆可分類一切皆為對象對象–----類的實體\一個叫Rain的好色的男人類------人\動物\機器方法-----人會走,會思考\狗會叫,會咬人\定義一個類的各個功能消息傳遞-----狗叫了,人聽見了,就叫通信繼承------狗都四條腿走路封裝------人不能引用狗的特性,比如四條腿走路多態(tài)性-----一個叫的功能,可能是低吼,也可是大聲叫抽象性------簡化復(fù)雜的現(xiàn)實問題的途徑,它可以為具體問題找到最恰當(dāng)?shù)念惗x2023/4/6官方群:1522462274本日內(nèi)容單例模式函數(shù)遞歸PythonmysqlSocket使用多線程socket程序練習(xí)PythonMysql交互importMySQLdbtry:conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db=’python_test',port=3306)cur=conn.cursor()cur.execute('select*fromuser_info')cur.close()conn.close()exceptMySQLdb.Error,e:print‘MysqlErrorMsg:’,ePythonMysql交互常用函數(shù):然后,這個連接對象也提供了對事務(wù)操作的支持,標(biāo)準(zhǔn)的方法commit()提交rollback()回滾cursor用來執(zhí)行命令的方法:callproc(self,procname,args):用來執(zhí)行存儲過程,接收的參數(shù)為存儲過程名和參數(shù)列表,返回值為受影響的行數(shù)execute(self,query,args):執(zhí)行單條sql語句,接收的參數(shù)為sql語句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)executemany(self,query,args):執(zhí)行單挑sql語句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)nextset(self):移動到下一個結(jié)果集cursor用來接收返回值的方法:fetchall(self):接收全部的返回結(jié)果行.fetchmany(self,size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會返回cursor.arraysize條數(shù)據(jù).fetchone(self):返回一條結(jié)果行.scroll(self,value,mode='relative'):移動指針到某一行.如果mode='relative',則表示從當(dāng)前所在行移動value條,如果mode='absolute',則表示從結(jié)果集的第一行移動value條.PythonMysql交互
try:conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)cur=conn.cursor()cur.execute('createdatabaseifnotexistspython')conn.select_db('python')cur.execute('createtabletest(idint,infovarchar(20))')
value=[1,'hirollen']cur.execute('insertintotestvalues(%s,%s)',value)
values=[]foriinrange(20):values.append((i,'hirollen'+str(i)))
cur.executemany('insertintotestvalues(%s,%s)',values)
cur.execute('updatetestsetinfo="Iamrollen"whereid=3')
mit()cur.close()conn.close()
exceptMySQLdb.Error,e:print"MysqlError%d:%s"%(e.args[0],e.args[1])PythonMysql交互try:conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)cur=conn.cursor()conn.select_db('python’)count=cur.execute('select*fromtest')print'therehas%srowsrecord'%count
result=cur.fetchone()printresultprint'ID:%sinfo%s'%resultresults=cur.fetchmany(5)forrinresults:printrprint'=='*10cur.scroll(0,mode='absolute')
results=cur.fetchall()forrinresults:printr[1]mit()cur.close()conn.close()
exceptMySQLdb.Error,e:print"MysqlError%d:%s"%(e.args[0],e.args[1])socket培訓(xùn)網(wǎng)址:一,socket是什么什么是socket所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。說白了就是一種通信機制。它類似于銀行,電信啊這些部分的電話客服部門。你打電話的時候,那邊會分配置一個人回答你的問題,客服部門就相當(dāng)于socket的服務(wù)器端了,你這邊呢就相當(dāng)于客戶端了,在和你通話結(jié)束前,如果有人在想找和你通話的那個說話,是不可能的,因為你在和他通信,當(dāng)然客服部門的電話交換機也不會重復(fù)分配。socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,都可以用“打開open–>讀寫write/read–>關(guān)閉close”模式來操作。Socket就是該模式的一個實現(xiàn),socket即是一種特殊的文件,一些socket函數(shù)就是對其進行的操作(讀/寫IO、打開、關(guān)閉)socket培訓(xùn)網(wǎng)址:官網(wǎng):1.打開socket2.綁定到一個地址和端口3.偵聽進來的連接4.接受連接5.讀寫數(shù)據(jù)Socket服務(wù)器端編程主要包括下面幾步Sockettype培訓(xùn)網(wǎng)址:socket.AF_UNIX 只能夠用于單一的Unix系統(tǒng)進程間通信socket.AF_INET 服務(wù)器之間網(wǎng)絡(luò)通信socket.AF_INET6 IPv6socket.SOCK_STREAM 流式socket,forTCPsocket.SOCK_DGRAM 數(shù)據(jù)報式socket,forUDPsocket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網(wǎng)絡(luò)報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構(gòu)造IP頭。socket.SOCK_RDM 是一種可靠的UDP形式,即保證交付數(shù)據(jù)報但不保證順序。SOCK_RAM用來提供對原始協(xié)議的低級訪問,在需要執(zhí)行某些特殊操作時使用,如發(fā)送ICMP報文。SOCK_RAM通常僅限于高級用戶或管理員運行的程序使用。socket.SOCK_SEQPACKET 可靠的連續(xù)數(shù)據(jù)包服務(wù)Socket函數(shù)培訓(xùn)網(wǎng)址:socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協(xié)議編號(默認為0)來創(chuàng)建套接字。套接字的實例具有以下方法:1、s.bind(address)將套接字綁定到地址。address地址的格式取決于地址族。在AF_INET下,以元組(host,port)的形式表示地址。2、s.listen(backlog)開始監(jiān)聽傳入連接。backlog指定在拒絕連接之前,操作系統(tǒng)可以掛起的最大連接數(shù)量。該值至少為1,大部分應(yīng)用程序設(shè)為5就可以了。3、s.connect(address)連接到address處的套接字。一般,address的格式為元組(hostname,port),如果連接同一臺機器上的服務(wù)器,可以將hostname設(shè)為‘localhost’。如果連接出錯,返回socket.error錯誤。4、s.connect_ex(adddress)功能與connect(address)相同,但是成功返回0,失敗返回errno的值。5、s.accept()接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發(fā)送數(shù)據(jù)。address是連接客戶端的地址。6、s.close()關(guān)閉套接字。Socket函數(shù)培訓(xùn)網(wǎng)址:7、s.fileno()返回套接字的文件描述符。8、s.getpeername()返回連接套接字的遠程地址。返回值通常是元組(ipaddr,port)。9、s.getsockname()返回套接字自己的地址。通常是一個元組(ipaddr,port)10、s.getsockopt(level,optname[.buflen])返回套接字選項的值。11、s.gettimeout()返回當(dāng)前超時期的值,單位是秒,如果沒有設(shè)置超時期,則返回None。12、s.recv(bufsize[,flag])接受套接字的數(shù)據(jù)。數(shù)據(jù)以字符串形式返回,bufsize指定要接收的最大數(shù)據(jù)量。flag提供有關(guān)消息的其他信息,通??梢院雎浴?3、s.recvfrom(bufsize[.flag])與recv()類似,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址。15、s.send(string[,flag])將string中的數(shù)據(jù)發(fā)送到連接的套接字。返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù)量可能小于string的字節(jié)大小。16、s.sendall(string[,flag])將string中的數(shù)據(jù)發(fā)送到連接的套接字,但在返回之前會嘗試發(fā)送所有數(shù)據(jù)。成功返回None,失敗則拋出異常。17、s.sendto(string[,flag],address)將數(shù)據(jù)發(fā)送到套接字,address是形式為(ipaddr,port)的元組,指定遠程地址。返回值是發(fā)送的字節(jié)數(shù)。該函數(shù)主要用于UDP協(xié)議。18、s.setblocking(flag)如果flag為0,則將套接字設(shè)為非阻塞模式,否則將套接字設(shè)為阻塞模式(默認值)。非阻塞模式下,如果調(diào)用recv()沒有發(fā)現(xiàn)任何數(shù)據(jù),或send()調(diào)用無法立即發(fā)送數(shù)據(jù),那么將引起socket.error異常。19、s.setsockopt(level,optname,value)設(shè)置給定套接字選項的值。20、s.settimeout(timeout)設(shè)置套接字操作的超時期,timeout是一個浮點數(shù),單位是秒。值為None表示沒有超時期。一般,超時期應(yīng)該在剛創(chuàng)建套接字時設(shè)置,因為它們可能用于連接的操作(如connect())普通的非套接字實例的函數(shù)1、getdefaulttimeout()返回默認的套接字超時時間(以秒為單位)。None表示不設(shè)置任何超時時間。2、gethostbyname(hostname)將主機名(如“”)轉(zhuǎn)換為IPv4地址,IP地址將以字符串的形式返回,如“”。不支持IPv63、gethostname()返回本地機器的主機名。Socket例子Server端#EchoserverprogramimportsocketHOST=‘'#SymbolicnamemeaningallavailableinterfacesPORT=50007#Arbitrarynon-privilegedports=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind((HOST,PORT))s.listen(1)conn,addr=s.accept()print'Connectedby',addrwhile1:data=conn.recv(1024)ifnotdata:breakconn.sendall(data)conn.close()Socket例子培訓(xùn)網(wǎng)址:Client端#EchoclientprogramimportsocketHOST='daring.cwi.nl'#TheremotehostPORT=50007#Thesameportasusedbytheservers=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect((HOST,PORT))s.sendall('Hello,world')data=s.recv(1024)s.close()print'Received',repr(data)SocketServer培訓(xùn)網(wǎng)址:classSocketServer.BaseServerSocketServer.BaseRequestHandlerTherequesthandlerclassmustdefineanewhandle()RequestHandler.handle()Thisfunctionmustdoalltheworkrequiredtoservicearequest.Thedefaultimplementationdoesnothing.Severalinstanceattributesareavailabletoit;therequestisavailableasself.request;theclientaddressasself.client_address;andtheserverinstanceasself.server,incaseitneedsaccesstoper-serverinformation.RequestHandler.setup()Calledbeforethehandle()methodtoperformanyinitializationactionsrequired.Thedefaultimplementationdoesnothing.BaseServer.serve_forever(poll_interval=0.5)?Handlerequestsuntilanexplicitshutdown()request.Pollforshutdowneverypoll_intervalseconds.Ignoresself.timeout.Ifyouneedtodoperiodictasks,dotheminanotherthread.ClientAStep1Step2Step3Step4連接池線程池服務(wù)線程1服務(wù)線程2服務(wù)線程3…..Connectrequestconnected放入連接池進行管理分配一個線程為此連接服務(wù)SocketServer例子
服務(wù)器端importSocketServerclassMyTCPHandler(SocketServer.BaseRequestHandler):"""TheRequestHandlerclassforourserver.Itisinstantiatedonceperconnectiontotheserver,andmustoverridethehandle()methodtoimplementcommunicationtotheclient."””defhandle(self):#self.requestistheTCPsocketconnectedtotheclientself.data=self.request.recv(1024).strip()print"{}wrote:".format(self.client_address[0])printself.data#justsendbackthesamedata,butupper-casedself.request.sendall(self.data.upper())if__name__=="__main__":HOST,PORT="localhost",9999#Createtheserver,bindingtolocalhostonport9999server=SocketServer.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#Activatetheserver;thiswillkeeprunninguntilyou#interrupttheprogramwithCtrl-Cserver.serve_forever()SocketServer例子
客戶端importsocketimportsysHOST,PORT="localhost",9999data="".join(sys.argv[1:])#Createasocket(SOCK_STREAMmeansaTCPsocket)sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:#Connecttoserverandsenddatasock.connect((HOST,PORT))sock.sendall(data+"\n")#Receivedatafromtheserverandshutdownreceived=sock.recv(1024)finally:sock.close()print"Sent:{}".format(data)print"Received:{}".format(received)Pythontwisted框架
官網(wǎng):Areyoureadytouseyourmagic?練習(xí)題培訓(xùn)網(wǎng)址:FTP服務(wù)器可傳送和接收文件可查看FTP服務(wù)器文件列表官網(wǎng):defserve_forever(self,poll_interval=0.5):"""Handleonerequestatatimeuntilshutdown.Pollsforshutdowneverypoll_i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB37T 4791-2024煤礦井下超大斷面硐室施工技術(shù)規(guī)范
- 江西省豐城市第九中學(xué)2025屆高三(復(fù)讀班)上學(xué)期第三次段考政治試卷(含答案)
- 讀書社團活動策劃(9篇)
- 歌頌教師主題演講稿三分鐘歌頌教師的主題集合4篇
- 光船租賃合同(2篇)
- 《職場溝通》電子教案 項目五 職場溝通中的禮儀準(zhǔn)備
- 2025年紫外光固化油墨合作協(xié)議書
- 2025年付里葉紅外分光光度計項目合作計劃書
- 2025年低溫超導(dǎo)材料項目發(fā)展計劃
- 賣車場地租賃協(xié)議
- 危險源辨識及分級管控管理制度
- GB/T 19752-2024混合動力電動汽車動力性能試驗方法
- 和員工簽股權(quán)合同范本
- 07FD02 防空地下室電氣設(shè)備安裝
- 《工程倫理》題集
- 江蘇2024年江蘇省新聞出版學(xué)校招聘人員筆試歷年典型考題及考點附答案解析
- 四川省成都市2023-2024學(xué)年高二歷史上學(xué)期期末聯(lián)考試題
- 河北省2024屆高三大數(shù)據(jù)應(yīng)用調(diào)研聯(lián)合測評(Ⅵ)英語試題含答案
- 成人手術(shù)后疼痛評估與護理-中華護理學(xué)會團體標(biāo)準(zhǔn)(2023)課件
- 《金屬基增容導(dǎo)線技術(shù)條件+第2部分:鋁包殷鋼芯耐熱鋁合金絞線》
- 園藝植物栽培學(xué)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
評論
0/150
提交評論