l005-python10期vip day512节后面不能播放老男孩教育_第1页
l005-python10期vip day512节后面不能播放老男孩教育_第2页
l005-python10期vip day512节后面不能播放老男孩教育_第3页
l005-python10期vip day512节后面不能播放老男孩教育_第4页
l005-python10期vip day512节后面不能播放老男孩教育_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python自动化开发

Day5AlexLi|simpleisgood|2015/06/06小日本上节回顾装饰器异常处理面向对象编程介绍类的使用第一个面向对象程序子类的继承程序练习捨遗:面向对象的特性世界万物,皆可分类一切皆为对象对象–----类的实体\一个叫Rain的好色的男人类------人\动物\机器方法-----人会走,会思考\狗会叫,会咬人\定义一个类的各个功能消息传递-----狗叫了,人听见了,就叫通信继承------狗都四条腿走路封装------人不能引用狗的特性,比如四条腿走路多态性-----一个叫的功能,可能是低吼,也可是大声叫抽象性------简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义2023/4/6官方群:1522462274本日内容单例模式函数递归PythonmysqlSocket使用多线程socket程序练习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交互常用函数:然后,这个连接对象也提供了对事务操作的支持,标准的方法commit()提交rollback()回滚cursor用来执行命令的方法:callproc(self,procname,args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数execute(self,query,args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数executemany(self,query,args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数nextset(self):移动到下一个结果集cursor用来接收返回值的方法:fetchall(self):接收全部的返回结果行.fetchmany(self,size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.fetchone(self):返回一条结果行.scroll(self,value,mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动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培训网址:一,socket是什么什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。它类似于银行,电信啊这些部分的电话客服部门。你打电话的时候,那边会分配置一个人回答你的问题,客服部门就相当于socket的服务器端了,你这边呢就相当于客户端了,在和你通话结束前,如果有人在想找和你通话的那个说话,是不可能的,因为你在和他通信,当然客服部门的电话交换机也不会重复分配。socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open–>读写write/read–>关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)socket培训网址:官网:1.打开socket2.绑定到一个地址和端口3.侦听进来的连接4.接受连接5.读写数据Socket服务器端编程主要包括下面几步Sockettype培训网址:socket.AF_UNIX 只能够用于单一的Unix系统进程间通信socket.AF_INET 服务器之间网络通信socket.AF_INET6 IPv6socket.SOCK_STREAM 流式socket,forTCPsocket.SOCK_DGRAM 数据报式socket,forUDPsocket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。socket.SOCK_SEQPACKET 可靠的连续数据包服务Socket函数培训网址:socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。套接字的实例具有以下方法:1、s.bind(address)将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。2、s.listen(backlog)开始监听传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。3、s.connect(address)连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接同一台机器上的服务器,可以将hostname设为‘localhost’。如果连接出错,返回socket.error错误。4、s.connect_ex(adddress)功能与connect(address)相同,但是成功返回0,失败返回errno的值。5、s.accept()接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。6、s.close()关闭套接字。Socket函数培训网址:7、s.fileno()返回套接字的文件描述符。8、s.getpeername()返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。9、s.getsockname()返回套接字自己的地址。通常是一个元组(ipaddr,port)10、s.getsockopt(level,optname[.buflen])返回套接字选项的值。11、s.gettimeout()返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。12、s.recv(bufsize[,flag])接受套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。13、s.recvfrom(bufsize[.flag])与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。15、s.send(string[,flag])将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。16、s.sendall(string[,flag])将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。17、s.sendto(string[,flag],address)将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。18、s.setblocking(flag)如果flag为0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。19、s.setsockopt(level,optname,value)设置给定套接字选项的值。20、s.settimeout(timeout)设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())普通的非套接字实例的函数1、getdefaulttimeout()返回默认的套接字超时时间(以秒为单位)。None表示不设置任何超时时间。2、gethostbyname(hostname)将主机名(如“”)转换为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例子培训网址: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培训网址: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连接池线程池服务线程1服务线程2服务线程3…..Connectrequestconnected放入连接池进行管理分配一个线程为此连接服务SocketServer例子

服务器端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框架

官网:Areyoureadytouseyourmagic?练习题培训网址:FTP服务器可传送和接收文件可查看FTP服务器文件列表官网:defserve_forever(self,poll_interval=0.5):"""Handleonerequestatatimeuntilshutdown.Pollsforshutdowneverypoll_i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论