Python編程:微信群聊程序的開發與進/線程知識匯總(附代碼)

2020-12-15 科技研究員猴哥

本文承接上篇文章的客戶端—伺服器聊天對話程序,進一步設計開發了微信群聊的python模擬程序,涉及的python知識點為:Python實戰:聊天軟體開發與TCP/Socket編程知識匯總(附代碼)和 進程與線程編程!

本文的內容章節為:

群聊對話演示與設計結構進程與線程詳解與代碼演示Python群聊程序代碼詳解

python群聊程序

一、群聊對話演示與設計結構

直接來看已經完成的python群聊程序對話演示結果圖:

該python群聊對話功能為:

小明,小蘭,小玲,小紅都是群成員每位群成員向群內發送信息,其他成員都能收到每啟動一個客戶端程序,用戶即可進入群聊 (一個窗口代表一個成員)下面用一張圖簡述群聊功能:

群聊中的成員向群內發送消息是單獨發送給群聊伺服器的,不是直接發送到群聊的群聊伺服器收到成員發送的消息後將該消息向群內轉發,實現群聊

群聊示意圖

下圖是本文中python群聊程序的設計結構圖(即運行方式),供大家參考:

群聊程序的設計結構

二、進程與線程詳解及代碼演示

在介紹具體代碼之前,先來為大家詳細總結下作業系統中進程與線程的相關知識以及python演示代碼!

★進程:作業系統中運行的每個程序可視為一個進程,可獨立運行,是作業系統分配資源的基本單位,如QQ程序。

★線程:輕量級的進程,是進程的組成部分,是作業系統執行功能的基本單元,如QQ中的每個聊天窗口。

★進程與線程的區別與聯繫:

一個進程可包含多個線程,一個線程只能屬於一個進程同一個進程中的各線程之間共享其進程下的資源多個進程可以並發啟動,同一個進程中的多個線程也可並發啟動同一進程下的一個線程被銷毀不會影響其他線程進程結束時,其所有線程將也被銷毀★ 現實中的進程與線程:

計算機的CPU承擔了作業系統所有程序的計算工作,好比一座大型工廠。該工廠的電力有限,每次只能供給一個車間的工作,即一個車間開工時,其他車間無法開工,好比CPU在任一時刻都只能有一個任務在運行,而車間就好比進程,表示工廠(CPU)的資源分配基本單元。

一個車間(進程)中可以擁有多位員工,員工就好比線程(一個進程可包含多個線程),一個車間中的所有資源是員工間共享的(線程共享父進程下的資源)。

但某個資源被一個員工佔用時其他員工將無法使用,必須等待當前員工使用完畢才能獲取該資源,如一個員工進入洗手間會鎖上門,那麼其他員工必須等待其方便結束才能使用該洗手間,這把鎖可視為線程間的資源「互斥鎖」,避免多個線程同時訪問同一資源引發衝突。

還有一個「信號量」的介紹,限於篇幅,本文不做贅述,感興趣的讀者可自行搜索:進程線程圖解!

★Python代碼演示進程與線程:

示例代碼:

進程線程代碼演示

進程創建線程是通過threading模塊Thread類來實現的,即threading.Thread類,其參數詳解如下:

__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *,daemon=None)

group:線程所屬的線程組,該參數尚未實現,使用默認值Nonetarget:線程要綁定的功能函數args :元組形式,元素的順序與類型必須與target綁定函數的參數一致,即元組的第一個元素傳給target函數的第一個參數,第二個元素傳給target函數的第二個參數……kwargs:字典形式,以key為target指定的函數傳入參數daemon:確定所創線程是否為後代線程三、Python群聊程序代碼詳解

下面的代碼需要以上篇文章:以上篇文章-Python實戰:聊天軟體開發與TCP/Socket編程知識匯總(附代碼)為基礎,便於深刻理解!

★群聊伺服器代碼:

群聊伺服器代碼

解析:

群聊伺服器沒有限制請求連接的用戶個數(listen())每個請求連接的用戶socket都將被群聊伺服器添加到列表:socket_clientlist群聊伺服器由線程不斷讀取已連接用戶的輸入信息並進行廣播伺服器收到群成員發送的消息後,向socket_clientlist中保存的所有用戶socket,也就是所有群成員群發這條消息,就完成了一個成員把消息發送到群聊的功能,模擬了群聊★ 群聊客戶端代碼:

群聊客戶端代碼

解析:

主進程不斷接收用戶輸入信息並進行發送子線程不斷接收群聊伺服器廣播的信息

四、Python群聊程序代碼獲取

感興趣的讀者可以評論區留言獲取文中代碼以供學習!文中如有任何不妥之處,還請讀者於評論區交流意見,在此提前感謝!

謝謝

相關焦點

  • Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信
    在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。
  • 今天破解了壓縮文件的密碼:使用python輕鬆編寫破解程序
    關注《編程高手傑瑞》,每天更新哦!獲取ZIP文件解壓密碼今天傑瑞又閒著無事可幹,索性去做了一個非常簡單且實用的一個python小程序,這個程序破解獲得zip加密文件的密碼。獲取zip文件解壓密碼的思路是使用窮舉法去「試」出真實密碼。
  • Python開發簡單爬蟲【學習資料總結】
    開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 介紹一下什麼是python(瘋狂Python)
    後續我會不斷努力的更新關於學英語的一些文章,同時,我也會不斷更新新的知識(譬如:程式語言:python,資料庫:mysql,Linux系統的一些操作等等,與大家一起學習進步)。進入正題,大家都應該聽說過Python這門程式語言吧,它在程式語言中的排名不斷的再提升,之所以這麼受歡迎,是因為它簡單,易學。
  • Python並發編程很簡單,一文搞清如何使用構造器創建線程
    上次已經和大家探討了關於進程和線程的區別和聯繫相關的東東,今天呢,咱們再次回到Python哦,和大家一起聊聊如何進行Python並發編程哦,大家也可以理解為如何在Python中進行多線程編程哦!好啦,廢話少說,咱們就開始吧!
  • C++後端開發面試題與知識點匯總(附答案)
    以下匯總C++後臺開發面試題與知識點,還有其他崗位的相關題庫和資料,想要什麼崗位的可以留言哦~附面試題目:一、基礎知識1、基本語言說一下C++和C的區別請問單核機器上寫多線程程序,是否需要考慮加鎖,為什麼?
  • Python和C語言的語法有什麼不同?
    隨著經濟發發展,網際網路精英的缺乏越來越嚴重了,尤其是編程工程師,市場缺乏率極高,所有對於準備即將學習編程朋友,是一個非常的好時機 python與C的區別如下: 1、語言類型:Python是一種基於解釋器的語言,會逐行讀取代碼,將Python編譯為字節碼,由大型C程序解釋;C是一種編譯語言,完整的原始碼將直接編譯為機器代碼,由CPU直接執行。
  • 開發|如何在小程序中,獲取微信群ID?
    微信在5月8日晚間,突然又宣布了一個新能力——。小程序可以讀取微信群的唯一ID那麼,如何正確地在小程序裡,加入這個能力呢?在使用開發者工具的時候,如何進行調試呢?今天,「知曉程序」就來告訴你,如何正確地在小程序裡讀取微信群ID。關注「知曉程序」公眾號,在微信後臺回復「ID」,查看小程序獲取群IDDemo的源碼。
  • Python基礎進階之海量表情包多線程爬蟲功能的實現
    這篇文章主要介紹了Python基礎進階之海量表情包多線程爬蟲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下一、前言在我們日常聊天的過程中會使用大量的表情包
  • 跟我學Java編程—sleep方法在線程同步中的具體應用場景
    先看一個例子代碼:MyRunner類代碼:在SleepDemo類主線程中,啟動子線程後,應用Thread類的sleep方法將主線程掛起1000毫秒,因為sleep方法拋出InterruptedException異常,因此調用sleep方法時,需要包含在try-cahtch
  • 新手寫Python程序有什麼推薦好用編輯器
    安裝完成python,需要一個稱手的編輯器。俗話說:工欲善其事,必先利其器。那到底新手寫Python程序有什麼推薦好用編輯器,網上一大堆編輯器不可能每一個都試一下。現在給點我自己學習python過程中選擇編輯器一些個人看法。
  • 如何在6個月內學會Python?
    筆者想提高數據科學技能並將職業規劃轉向數據分析領域,學習python就是該計劃的一部分。因此,筆者不再是為了學習而學習,而是需要python的工作知識才能進行數據分析,同時需要理解一系列庫才能開始著手項目。在學習python時,筆者制定了更遠大的目標。設定最初的目標,已經事半功倍了。為正在學習的語言找到一種應用程式,將更快掌握該語言。
  • 另類的Python學習路線「非編程系必備」
    後來想一想其實還是很有必要,因為我想也許有很多人和我一樣想走近這門程式語言,而那些大咖的分享往往都是站在一個制高點上,雖然很有道理卻有很多不切和我們這些非科班出身的人。這篇指南是我在Python學習小有成就,並能通過Python編程小賺一筆的情況下,對於3年的斷斷續續python學習作出的學習指南。
  • 3分鐘了解python!新手必看
    對於從事IT行業的人來說,對python語言並不陌生,但是其他行業的人可能對python了解的不多,或者聽都沒聽過,今日小編就從多個角度來詳細介紹下python這門程式語言,告訴大家python是什麼?python可以用來幹什麼?同時如果你想學習Python的話,可以找黑馬先鋒來進行系統式培訓。
  • 學了Scratch還不會寫代碼?極客晨星想實現圖形化編程到碼代碼的銜接
    從編程工具切入市場,實現圖形化編程和代碼之間自然銜接是極客晨星的特色。目前,極客晨星主要為 6-15 歲的兒童與青少年提供編程教育服務,其課程內容包括可視化編程邏輯概念、初級/中級算法、js、python、C等工作語言、高級算法。2016年8月成立至今,極客晨星在北京有6個校區,累計培訓學生約 500 人,低齡階段課程續費率達90%以上。
  • 漫畫:如何分析運行中的 Python 程序?
    是代碼的問題還是其他依賴服務存在問題導致本 Python 程序出現問題?自己在測試環境運行相同的代碼,發現沒有任何問題,那是其他依賴的問題?這麼多依賴服務,一個個查是不現實的,那只能在代碼中加多點日誌,然後再放到線上去看了?
  • 一杯星巴克的時間,python居然幫我完成了5個小時的工作量!
    經理還拉了群聊讓大家多跟新同事學習,不要總是埋頭工作,小晶感覺心裡很憋屈,默默退出了群聊…… 「憑什麼她每天到點下班,卻升職加薪,我辛辛苦苦賣命工作了 2 年,還是稅後 4220.23!
  • 開課吧:最值得學的程式語言是什麼?程式語言通用學習方法分享!
    零基礎學習編程首先要選對自己的方向,目前整體的方向上分為前端開發,後端開發,大數據,雲計算,人工智慧,運維測試等等,自己要選定好這個方向,選定好了,再去選擇一門語言去學習。有了方向選擇起來就比較方便了,比如嵌入式的先從C語言入手,後端的選擇java或者php,python等入手,決定因素就是看你能不能堅持。就單論語言來說,程式語言基本是獨立的,沒有誰前誰後之說,比如Java和C#,先學哪個都行。
  • 那些讓人驚豔的Python庫
    python-decouple–將設置和代碼完全隔離。命令行工具用於創建命令行程序的庫。cement–Python的命令行程序框架。click–一個通過組合的方式來創建精美命令行界面的包。cliff–一個用於創建命令行程序的框架,可以創建具有多層命令的命令行程序。
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    大家點開百度右擊網頁原始碼會發現是這些玩意:那其實這些許許多多的網站背後都是一些數據如果我們可以用一個自動化的程序輕輕鬆鬆就能把它們給爬取下來,是不是很爽?比如,一些文獻網站我們只要用 Python寫幾行代碼然後一運行這個程序就幫我們爬取所有的相關文獻到我們本地完全不需要我們費一點力氣。