【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的多线程并发。




本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1700042,如需转载请自行联系原作者

相关文章
|
8月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
537 0
|
1月前
|
设计模式 运维 监控
并发设计模式实战系列(4):线程池
需要建立持续的性能剖析(Profiling)和调优机制。通过以上十二个维度的系统化扩展,构建了一个从。设置合理队列容量/拒绝策略。动态扩容/优化任务处理速度。检查线程栈定位热点代码。调整最大用户进程数限制。CPU占用率100%
148 0
|
20天前
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
48 15
|
1月前
|
存储 缓存 安全
JUC并发—11.线程池源码分析
本文主要介绍了线程池的优势和JUC提供的线程池、ThreadPoolExecutor和Excutors创建的线程池、如何设计一个线程池、ThreadPoolExecutor线程池的执行流程、ThreadPoolExecutor的源码分析、如何合理设置线程池参数 + 定制线程池。
JUC并发—11.线程池源码分析
|
1月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
73 0
|
7月前
|
安全
List并发线程安全问题
【10月更文挑战第21天】`List` 并发线程安全问题是多线程编程中一个非常重要的问题,需要我们认真对待和处理。只有通过不断地学习和实践,我们才能更好地掌握多线程编程的技巧和方法,提高程序的性能和稳定性。
411 59
|
7月前
|
安全 Java
线程安全的艺术:确保并发程序的正确性
在多线程环境中,确保线程安全是编程中的一个核心挑战。线程安全问题可能导致数据不一致、程序崩溃甚至安全漏洞。本文将分享如何确保线程安全,探讨不同的技术策略和最佳实践。
120 6
|
7月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
169 8
|
7月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
8月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
305 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输

推荐镜像

更多