用数据池来实现socket并发
最终目标:启动服务后可以有无数个访问,并且可以随时输入,服务端使用进程池。
服务端
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只有两个,证明确实是在进程池中循环
用数据池来实现socket并发的更多相关文章
- C#高性能大容量SOCKET并发(零):代码结构说明
原文:C#高性能大容量SOCKET并发(零):代码结构说明 C#版完成端口具有以下特点: 连接在线管理(提供在线连接维护,连接会话管理,数据接收,连接断开等相关事件跟踪): 发送数据智能合并(组件会根 ...
- C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
原文:C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能 ...
- python基础之小数据池、代码块、编码和字节之间换算
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- Python select实现socket并发
Python select Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时 ...
- Python基础学习Day6 is id == 区别,代码块,小数据池 ---->>编码
一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...
- python基础之小数据池、代码块、编码
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- python全栈开发从入门到放弃之socket并发编程之协程
一.为什么会有协程 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情 ...
- C#高性能大容量SOCKET并发(十一):编写上传客户端
原文:C#高性能大容量SOCKET并发(十一):编写上传客户端 客户端封装整体框架 客户端编程基于阻塞同步模式,只有数据正常发送或接收才返回,如果发生错误则抛出异常,基于TcpClient进行封装,主 ...
- C#高性能大容量SOCKET并发(九):断点续传
原文:C#高性能大容量SOCKET并发(九):断点续传 上传断点续传 断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1:下载开始的时候 ...
随机推荐
- Spring 读取配置文件(二)
Spring 读取配置文件并调用 bean package cn.com.test.receive; import org.springframework.beans.factory.annotati ...
- Tomcat启动报错:SERVER: Error ListenerStart 排查过程记录
报错的Tomcat截图: 要排查此问题,首先需要调整tomcat的日志级别,调整成通过log4j来记录日志的方式,具体的调整方式: http://tomcat.apache.org/tomcat- ...
- 2017-5-14 湘潭市赛 Highway 先获得直径S,T。则一开始S,T相连,然后其他的点如果离S更远那么连在S,否则T;
Highway Accepted : Submit : Time Limit : MS Memory Limit : KB Highway In ICPCCamp there were n towns ...
- python第二周数据类型 字符编码 文件处理
第一数据类型需要学习的几个点: 用途 定义方式 常用操作和内置的方法 该类型总结: 可以存一个值或者多个值 只能存储一个值 可以存储多个值,值都可以是什么类型 有序或者无序 可变或者不可变 二:数字整 ...
- java 定时器
import java.io.IOException; import java.util.Timer; public class TimerTest { public static void main ...
- BestCoder Round #93 ABC
A: 题目大意: 将数组划分成最少的段,每段的数两两不同. 题解:直接用一个map记录一个数是否出现过,贪心的每次取最多个数就好. B: 题目大意: 给出一个0-9组成的字符串,问能否删掉K个数字,使 ...
- cobbler 更换dns和dhcp服务器为dnsmasq
1) 需要配置/etc/cobbler/module.conf, 把manage_dns和manage_dhcp改为manage_dnsmasq 2) 重启cobbler和dnsmasq服务,dnsm ...
- 《转》Ubuntu14.04 openstack juno配置之 ceilometer遥測模块安装配置
(一)在控制节点上 1.安装的遥測服务 apt-get install -y ceilometer-api ceilometer-collector ceilometer-agent-central ...
- mongo-connector来同步mongo
个人博客:https://blog.sharedata.info/ 最近需要做mongo之间的同步,因此还是选择之前的工具mongo-connectorgitHub文档:https://github. ...
- (分享)Linux服务器如何防止中木马
大家的windows机器可能经常装一些杀毒软件或者什么的来防止中毒,然而在Linux上我们应该怎么防止这些呢? 在面试过程中我们也经常遇到该类问题,那么我们应该怎么回答才显得既有逻辑又有深度呢? 首先 ...