【Python之旅】第五篇(三):Python Socket多线程并发

简介:

 前面的几个例子都是单线程的,下面再来说说多线程的。


1.多线程模块

    主要是socketserver模块,如下图示:

wKiom1YPmb2TPBqQAAJlgI3CCPk647.jpg


2.多线程原理

    如下图示说明:

wKioL1YPmgyj_atyAAIZT9TernQ085.jpg


3.SockteServer例子说明

服务器端:

wKiom1YPmkjiaEvhAALY_XJdPtI659.jpg


客户端:

wKioL1YPmnahMs6AAAGY8lr71ok291.jpg


4.演示

    还是以前面例子,对代码进行修改,作如下的演示。

Server端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import  SocketServer            #导入SocketServer,多线程并发由此类实现
 
class  MySockServer(SocketServer.BaseRequestHandler):    #定义一个类
 
     def handle(self):      #handle(self)方法是必须要定义的,可以看上面的说明
         print  'Got a new connection from' , self.client_address
         while  True:
             data = self.request.recv( 1024 )    #需要通过self的方法调用数据接收函数
             if  not data: break
             print  'recv:' , data
 
             self.request.send(data.upper())   #需要通过self的方法调用数据接收函数
 
if  __name__ ==  '__main__' :    #并非一定要用这样的方式,只是建议这样使用
     HOST =  ''              #定义侦听本地地址口(多个IP地址情况下),这里表示侦听所有
     PORT =  50007           #Server端开放的服务端口
     s = SocketServer.ThreadingTCPServer((HOST, PORT), MySockServer)
                               #调用SocketServer模块的多线程并发函数
     s.serve_forever()     #持续接受客户端的连接

Client端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import  socket
 
HOST =  '192.168.1.13'
PORT =  50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
 
while  True:
     user_input = raw_input( 'msg to send:' ).strip()
     s.sendall(user_input)
     data = s.recv( 1024 )
     print  'Received' , repr(data)
 
s.close()

演示:

步骤1:Server端运行服务端程序

1
2
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
===>光标在此处处于等待状态

步骤2:Client A端运行客户端程序

1
2
3
4
5
6
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python client4.py 
msg to send:Hello!    ===>User输入数据
Received  'HELLO!'      ===>Server端返回的数据
msg to send:I'm Client A.
Received  "I'M CLIENT A."
msg to send:          ===>继续等待User输入数据

步骤3:在Server端中观察现象

1
2
3
4
5
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
Got a  new  connection from ( '192.168.1.13' 52650 )
recv: Hello!        
recv: I'm Client A.    ===>接收到Client A端发送的数据
===>光标在此处处于等待状态
步骤4:Client B端运行客户端程序
1
2
3
4
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python client4.py 
msg to send:I'm Client B.    ===>User输入数据
Received  "I'M CLIENT B."      ===>Server端返回的数据
msg to send:                 ===>继续等待User输入数据

步骤5:在Server端中观察现象

1
2
3
4
5
6
7
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day5$ python Thread_socket_server4.py 
Got a  new  connection from ( '192.168.1.13' 52650 )
recv: Hello!
recv: I'm Client A.
Got a  new  connection from ( '192.168.1.13' 52651 )
recv: I'm Client B.    ===>接收到Client A端发送的数据
===>光标在此处处于等待状态

    通过上面的演示,使用SocketServer便可以实现Python Socket的多线程并发。

相关文章
|
28天前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
129 0
|
16天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
13天前
|
安全
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
123 59
|
4天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
28天前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
112 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
28天前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
112 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
10天前
|
Java Unix 调度
python多线程!
本文介绍了线程的基本概念、多线程技术、线程的创建与管理、线程间的通信与同步机制,以及线程池和队列模块的使用。文章详细讲解了如何使用 `_thread` 和 `threading` 模块创建和管理线程,介绍了线程锁 `Lock` 的作用和使用方法,解决了多线程环境下的数据共享问题。此外,还介绍了 `Timer` 定时器和 `ThreadPoolExecutor` 线程池的使用,最后通过一个具体的案例展示了如何使用多线程爬取电影票房数据。文章还对比了进程和线程的优缺点,并讨论了计算密集型和IO密集型任务的适用场景。
28 4
|
12天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
14 1
|
17天前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
21天前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。

热门文章

最新文章