1.網(wǎng)絡(luò)編程
-
socket(套接字)
1)什么是socket
socket又叫套接字,指的是網(wǎng)絡(luò)通信的兩端,分別是服務(wù)器和客戶端,socket編程就是通過代碼實現(xiàn)客戶端和服務(wù)器之間的通信
2)服務(wù)器的實現(xiàn)
-
創(chuàng)建套接字的對象
server = socket.socket(family,type)
family:ip類型,AF_INET>ipv4
type:傳輸協(xié)議的類型,SOCK_STREAM>TCP,
SOCK_DGRAM>UDP,
-
綁定IP地址和端口
IP用來區(qū)分互聯(lián)網(wǎng)上設(shè)備
端口是用來區(qū)分一臺計算機上不同的服務(wù)(應(yīng)用),值是0-65535,其中0-1024是著名端口。
server.bind((ip地址,端口號))
-
啟動服務(wù)器(監(jiān)聽請求)
server.listen(數(shù)量)這里的數(shù)量指的是一次性能夠處理的最大請求數(shù)
-
讓服務(wù)器一直處于運行狀態(tài)
while 1:
? print(‘開始監(jiān)聽’)
-
等待客戶端的請求
等待客戶端的請求
程序執(zhí)行到這個地方會停下來,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行(進程阻塞)
connect,addr=server.accept()
print(connect,addr)等待客戶端的請求
程序執(zhí)行到這個地方會停下來,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行()
-
發(fā)送消息
send(數(shù)據(jù))
message = input(‘>>>’)
connect.send(message.encode(encoding = 'utf-8'))
-
接受消息
recv(字節(jié)數(shù)) -接受數(shù)據(jù),并且制定一次性接受的數(shù)據(jù)的最大值;返回接受到的二進制數(shù)據(jù)。
data = connect.recv(1024) -程序運行到這里會停下來,直到客戶端給服務(wù)器發(fā)送消息,才會執(zhí)行
print(data.decode(encoding = 'utf-8'))
-
關(guān)閉連接
connect。close()
3)客戶端的實現(xiàn)
-
創(chuàng)建客戶端對象
client = socket.socket()
-
連接服務(wù)器
client .connect('10.7.190.138',8080)
-
接收消息
data = client.recv(1024)
print('<<<:')
print(data.decode(encoding = 'utf-8'))
-
發(fā)送消息
message = input('>>>:')
client .send(message.encode(encoding= 'utf-8'))
-
關(guān)閉客戶端
client.close()
-
-
網(wǎng)絡(luò)請求(request):根據(jù)網(wǎng)絡(luò)接口請求數(shù)據(jù)
1)獲取字符串形式的數(shù)據(jù)結(jié)果
? text = response.text
? print(type(text),text)2)獲取二進制數(shù)據(jù)
? data = response.content
? print(type(data),data)3)獲取json數(shù)據(jù)
? message = response.json()
? print(type(message),message)
2.多線程
進程:一個正在運行的應(yīng)用程序,每個進程之間是相互獨立的。每個進程默認都有一個線程(主線程)
-
線程:進程執(zhí)行任務(wù)的基本單元(最小基本單元)
1個線程中任務(wù)的執(zhí)行是串行的
-
進程和線程的區(qū)別:
1)線程是CPU調(diào)用(執(zhí)行任務(wù))的最小單位
2)進程是CPU分配資源和調(diào)度的單位
3)一個程序可以有多個進程,一個進程至少有一個線程。
4)同一個進程內(nèi)的線程共享進程的資源
-
多線程:一個進程可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)
進程>車間,線程>車間工人
多線程執(zhí)行可以提高程序的執(zhí)行效率
-
多線程的原理
同一時間,CPU只能處理一條線程,只有一條線程在執(zhí)行
多線程并發(fā)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度。
-
python中如何使用多線程:
通過內(nèi)置threading模塊來提供多線程相關(guān)技術(shù),其中有一個Thread類,這個類的對象就是線程對象
1)直接創(chuàng)建線程類的對象
a.語法:xiancheng duixiang = Thread(target=函數(shù),args=參數(shù))創(chuàng)建一個線程對象,并返回
b.說明,function類型的變量,這個函數(shù)的函數(shù)體就會在線程執(zhí)行
參數(shù):元祖;參數(shù)會傳給target對應(yīng)的函數(shù),
2)讓線程開始執(zhí)行任務(wù)
線程對象.start() 開始執(zhí)行子線程的任務(wù)
3)創(chuàng)建線程子類
聲明一個類繼承自Thread
重寫run方法,這個方法中的任務(wù)就是需要在子線程中執(zhí)行的任務(wù)
創(chuàng)建當前類的對象(線程對象)
-
join
線程對象.join() -功能:程序執(zhí)行到此處,會停下來(當前線程會阻塞)等線程執(zhí)行完畢再執(zhí)行下面語句
?
?
?