python第十一天学习总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python第十一天学习总结相关的知识,希望对你有一定的参考价值。
一.udp
udp协议特点:无连接 快 不可靠 面向数据包的传输 只能发短消息
client:
import json
import socket
server_addr = (‘127.0.0.1‘,9090)
sk = socket.socket(type=socket.SOCK_DGRAM) #指定类型为udp
while True:
msg = input(‘>>>‘)
dic = {‘msg‘:msg,‘username‘:‘client2‘}
send_msg = json.dumps(dic).encode(‘utf-8‘)
sk.sendto(send_msg,server_addr) #发送消息
msg,server_addr = sk.recvfrom(1024) #接收消息
msg_dic = json.loads(msg.decode(‘utf-8‘))
print(‘消息来自%s: %s‘ % (msg_dic[‘username‘],msg_dic[‘msg‘]))
sk.close()
server:
import json
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) #指定类型为udp
sk.bind((‘127.0.0.1‘,9090))
while True:
msg,client_addr = sk.recvfrom(1024) #需先接受客户端的信息,无连接的
msg_dict = json.loads(msg.decode(‘utf-8‘))
print(‘消息来自%s : %s‘ %(msg_dict[‘username‘],msg_dict[‘msg‘]))
msg = input(‘>>>‘)
dic = {‘msg‘: msg,‘username‘:‘server‘}
send_msg = json.dumps(dic).encode(‘utf-8‘)
sk.sendto(send_msg,client_addr) #发送消息
sk.close()
二.socketserver
socketserver可以同时和多个客户端通讯
server:
import socketserver
class Myserver(socketserver.BaseRequestHandler): #定义一个类,继承BaseRequestHandler
def handle(self): #必须定义一个handle方法
conn = self.request
addr = self.client_address
while True:
conn.send(b‘hello‘)
print(conn.recv(1024),addr[1])
if name == ‘main‘:
server = socketserver.ThreadingTCPServer((‘127.0.0.1‘,9090),Myserver) #实例化一个对象
server.serve_forever()
client:
import socket
sk = socket.socket()
sk.connect((‘127.0.0.1‘,9090))
while True:
print(sk.recv(1024))
sk.send(b‘bye‘)
sk.close()
三.并发编程
进程:正在运行的程序,是计算机中资源分配的最小单位
同步:做完一件事情 再做另外一件事情
异步:做一件事情的时候 可以再做另一件事情
并行 : 并行是指两者同时执行
并发 : 并发是指资源有限的情况下,两者交替轮流使用资源
阻塞:recv sleep accept input recv recvfrom
非阻塞:没有阻塞的情况
multiprocessing模块:
p.start():启动进程
p.run():进程启动时运行的方法
p.terminate():强制终止进程p
p.is_alive():如果p仍然运行,返回True
p.join([timeout]):主线程等待p终止
p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止
锁:同步控制,提高数据的安全性,效率会降低
lock.acquire() #使用锁 同一时间只有一个进程可以访问资源
lock.release() #释放锁
队列:实现多进程之间的数据传递
q.put(1) #在队列中放值
q.get() #在队列中取值
q.put_nowait( ) #如果q已满 再放值不阻塞
q.get_nowait( ) #如果q已空 再取值不阻塞
q.empty() #判断队列是否为空 返回布尔值
q.full() #判断队列是否已满,返回布尔值
以上是关于python第十一天学习总结的主要内容,如果未能解决你的问题,请参考以下文章