python开发微信群_Python编程:微信群聊程序的开发与进/线程知识汇总(附代码)

本文承接上篇文章的客户端—服务器聊天对话程序,进一步设计开发了微信群聊的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开发微信群)