用数据池来实现socket并发
2024-08-29 22:51:22
最终目标:启动服务后可以有无数个访问,并且可以随时输入,服务端使用进程池。
服务端
from socket import *
import os,time
from concurrent.futures import ProcessPoolExecutor
def func(conn,addr):
while True:
try:
ret = conn.recv(1024)
if not ret:break
time.sleep(5)
print(ret.decode('utf-8'))
conn.send(ret.upper())
print("端口号:【%s】是,进程ID:【%s】"% (addr[1],os.getpid()))
except ConnectionResetError:
break if __name__ == "__main__":
server = socket(AF_INET, SOCK_STREAM)
server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
server.bind(('127.0.0.1', 8130))
server.listen(5) p = ProcessPoolExecutor(2)
while True:
conn,addr = server.accept()
p.submit(func,conn,addr)
客户端
from socket import *
while True:
client = socket(AF_INET, SOCK_STREAM) #这里使用的是伪链接,每输入一次都会断开,但客户端看起来一直与服务端保持着链接,其实没有
data = input('>>>').strip()
client.connect(('127.0.0.1',8130))
client.send(data.encode('utf-8'))
ret = client.recv(1024)
print(ret.decode('utf-8'))
client.close()
创建了4个客户端,执行结果
hgsdfa
端口号:【54815】是,进程ID:【15828】
eawd
端口号:【54817】是,进程ID:【5580】
few
端口号:【54819】是,进程ID:【15828】
few
端口号:【54820】是,进程ID:【5580】
cv;
端口号:【54829】是,进程ID:【15828】
g
端口号:【54831】是,进程ID:【5580】
#可以清楚的看到,进程ID只有两个,证明确实是在进程池中循环
最新文章
- AutoCAD .net 开发 SelectionFilter Foreach Linq 性能比较
- jQuery原生框架-----------------核心框架
- 【zz】matlab 均值方差
- 苹果的软件/系统盘 网站 http://www.panduoduo.net/u/bd-369186934/2
- Html / CSS常见问题 解决方案
- ntpath join(path, *paths) 发生UnicodeDecodeError的Bug的解决方案
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别
- ubuntu 12.04 安装nginx
- 《招聘一个靠谱的iOS》面试题参考答案(下)
- JVM 垃圾回收机制( 一) 回收对象的判定
- 【jQuery插件】使用cropper实现简单的头像裁剪并上传
- 【LR9】【LOJ561】CommonAnts 的调和数 数论 筛法
- CF666E Forensic Examination
- Nginx搭建
- PTA 7-3 jmu-ds-单链表的基本运算(15 分)
- Sql Server中日期时间格式化为字符串输出
- django 静态文件
- [转]java中通过request获取路径中的不同信息
- POJ 1062 最短路Dijstra
- Bypass WAF