博客
关于我
python单线程下实现多个socket并发
阅读量:797 次
发布时间:2023-03-07

本文共 1829 字,大约阅读时间需要 6 分钟。

使用gevent、多线程和多进程实现高并发客户端连接

服务端实现

在服务端,我们使用gevent库来实现非阻塞的TCP服务器。这种方法能够显著提升服务器的吞吐量,特别是在处理大量并发连接时。gevent通过 monkey.patch_all() 将socket模块的关键函数改为非阻塞模式,这使得服务器可以在不等待客户端连接的情况下继续处理其他请求。

import gevent
from gevent import socket
monkey.patch_all()
def server(port):
s = socket.socket()
s.bind(("127.0.0.1", port))
s.listen(2000)
while True:
client, addr = s.accept()
gevent.spawn(handle_request, client)
def handle_request(s):
try:
while True:
data = s.recv(1024)
print("收到的信息:{}".format(data.decode("utf-8")))
if not data:
s.shutdown(socket.SHUT_WR)
except Exception as e:
print("异常:{}".format(e))
finally:
s.close()

客户端实现

在客户端,我们通过多线程和多进程的方式同时建立多个连接。两种方法各有优劣,需要根据实际需求选择。

多线程实现

import socket
import threading
ip_addr = ("127.0.0.1", 8000)
c = socket.socket()
c.connect(ip_addr)
def handle_client(n):
while True:
data = str(n)
c.send(data.encode("utf-8"))
received = c.recv(1024)
print("服务器回复:{}".format(received.decode("utf-8")))
c.close()
if __name__ == "__main__":
for i in range(500):
thread = threading.Thread(target=handle_client, args=(i,))
thread.start()

多进程实现

import socket
import multiprocessing
ip_addr = ("127.0.0.1", 8000)
c = socket.socket()
c.connect(ip_addr)
def handle_client(n):
while True:
data = str(n)
c.send(data.encode("utf-8"))
received = c.recv(1024)
print("服务器回复:{}".format(received.decode("utf-8")))
c.close()
if __name__ == "__main__":
for i in range(100):
p = multiprocessing.Process(target=handle_client, args=(i,))
p.start()

对比分析

  • 多线程:每个线程共享同一个socket连接,这意味着所有线程会竞争同一个IP地址和端口,这在实际中可能导致连接被拒绝或不稳定。
  • 多进程:每个进程都有自己的socket连接,可以独立与服务器通信,但会占用更多的内存资源。

在实际应用中,选择哪种方式取决于任务的负载要求和系统资源情况。

转载地址:http://bhofk.baihongyu.com/

你可能感兴趣的文章
Python基础学习参考(五):字符串和编码
查看>>
Python基础学习
查看>>
python基础变量之---集合
查看>>
python基础变量之---字典
查看>>
python基础变量之---列表
查看>>
python基础变量之---元组
查看>>
python基础内容_Python基础入门必须了解的
查看>>
Python基础之面向对象2(封装)
查看>>
Python基础之给函数增加元信息
查看>>
python基础之字符编码
查看>>
python基础之多线程与多进程(二)
查看>>
Python基础之基本数据类型一《数字与字符串》
查看>>
python基础之变量---总纲
查看>>
Python基础之列表
查看>>
Python基础之Python环境搭建
查看>>
python基础之--面相对象--OOP基本特性
查看>>
python基础之--迭代器和生成器及异常处理
查看>>
python基础之--包和模块
查看>>
python基础之---面向对象--属性和方法
查看>>
python基础之---运算符
查看>>