码迷,mamicode.com
首页 > 编程语言 > 详细

python第十一天学习总结

时间:2018-08-03 11:32:16      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:总结   request   pytho   while   nat   bind   ase   put   线程   

一.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第十一天学习总结

标签:总结   request   pytho   while   nat   bind   ase   put   线程   

原文地址:http://blog.51cto.com/13544778/2153893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!