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() #判斷隊列是否已滿,返回布爾值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章