博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python第十一天学习总结
阅读量:6147 次
发布时间:2019-06-21

本文共 2104 字,大约阅读时间需要 7 分钟。

一.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() #判断队列是否已满,返回布尔值

转载于:https://blog.51cto.com/13544778/2153893

你可能感兴趣的文章
类与成员变量,成员方法的测试
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
关于连续群的表示
查看>>
linux网络基础配置
查看>>
javascript获取屏幕的可用宽度和高度
查看>>
shell脚本-简单的添加用户
查看>>
发展开源项目还是开源社区——对中国开源生态的思考
查看>>
MongoDB 2.4.10 安装和配置
查看>>
脚本的基本语法
查看>>
用户和组管理命令介绍与详解
查看>>
帧中继点到点实验
查看>>
C程序缓冲输入流关于getchar()与scanf()的思考
查看>>
等级保护和分级保护
查看>>
shell标准输入输出
查看>>
算法学习笔记(二)字符串根据逆序排序
查看>>
禁止普通用户使用su命令切换到root用户
查看>>
[BZOJ 3751][NOIP2014]解方程(哈希)
查看>>
整页滑动的 RecyclerView
查看>>
关于CSS:absolute定位
查看>>