python第十一天學習總結

來源:互聯網
上載者:User

標籤:總結   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第十一天學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.