Ygon's Day14_socket_線程域進程

1.網(wǎng)絡(luò)編程

  1. socket(套接字)

    1)什么是socket

    socket又叫套接字,指的是網(wǎng)絡(luò)通信的兩端,分別是服務(wù)器和客戶端,socket編程就是通過代碼實現(xiàn)客戶端和服務(wù)器之間的通信

    2)服務(wù)器的實現(xiàn)

    1. 創(chuàng)建套接字的對象

      server = socket.socket(family,type)

      family:ip類型,AF_INET>ipv4

      type:傳輸協(xié)議的類型,SOCK_STREAM>TCP,

      SOCK_DGRAM>UDP,

    2. 綁定IP地址和端口

      IP用來區(qū)分互聯(lián)網(wǎng)上設(shè)備

      端口是用來區(qū)分一臺計算機上不同的服務(wù)(應(yīng)用),值是0-65535,其中0-1024是著名端口。

      server.bind((ip地址,端口號))

    3. 啟動服務(wù)器(監(jiān)聽請求)

      server.listen(數(shù)量)這里的數(shù)量指的是一次性能夠處理的最大請求數(shù)

    4. 讓服務(wù)器一直處于運行狀態(tài)

      while 1:

      ? print(‘開始監(jiān)聽’)

    5. 等待客戶端的請求

      等待客戶端的請求

      程序執(zhí)行到這個地方會停下來,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行(進程阻塞)

      connect,addr=server.accept()

      print(connect,addr)等待客戶端的請求

      程序執(zhí)行到這個地方會停下來,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行()

    6. 發(fā)送消息

      send(數(shù)據(jù))

      message = input(‘>>>’)

      connect.send(message.encode(encoding = 'utf-8'))

    7. 接受消息

      recv(字節(jié)數(shù)) -接受數(shù)據(jù),并且制定一次性接受的數(shù)據(jù)的最大值;返回接受到的二進制數(shù)據(jù)。

      data = connect.recv(1024) -程序運行到這里會停下來,直到客戶端給服務(wù)器發(fā)送消息,才會執(zhí)行

      print(data.decode(encoding = 'utf-8'))

    8. 關(guān)閉連接

      connect。close()

    3)客戶端的實現(xiàn)

    1. 創(chuàng)建客戶端對象

      client = socket.socket()

    2. 連接服務(wù)器

      client .connect('10.7.190.138',8080)

    3. 接收消息

      data = client.recv(1024)

      print('<<<:')

      print(data.decode(encoding = 'utf-8'))

    4. 發(fā)送消息

      message = input('>>>:')

      client .send(message.encode(encoding= 'utf-8'))

    5. 關(guān)閉客戶端

      client.close()

  1. 網(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.多線程

  1. 進程:一個正在運行的應(yīng)用程序,每個進程之間是相互獨立的。每個進程默認都有一個線程(主線程)

  2. 線程:進程執(zhí)行任務(wù)的基本單元(最小基本單元)

    1個線程中任務(wù)的執(zhí)行是串行的

  3. 進程和線程的區(qū)別:

    1)線程是CPU調(diào)用(執(zhí)行任務(wù))的最小單位

    2)進程是CPU分配資源和調(diào)度的單位

    3)一個程序可以有多個進程,一個進程至少有一個線程。

    4)同一個進程內(nèi)的線程共享進程的資源

  4. 多線程:一個進程可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)

    進程>車間,線程>車間工人

    多線程執(zhí)行可以提高程序的執(zhí)行效率

  5. 多線程的原理

    同一時間,CPU只能處理一條線程,只有一條線程在執(zhí)行

    多線程并發(fā)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度。

  6. 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)建線程子類

    1. 聲明一個類繼承自Thread

    2. 重寫run方法,這個方法中的任務(wù)就是需要在子線程中執(zhí)行的任務(wù)

    3. 創(chuàng)建當前類的對象(線程對象)

    4. join

      線程對象.join() -功能:程序執(zhí)行到此處,會停下來(當前線程會阻塞)等線程執(zhí)行完畢再執(zhí)行下面語句

    ?

    ?

    ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容