Python 单线程下实现多个socket并发
## 客户端
import socket
import gevent
import threading
import multiprocessing
ip_bind = ('127.0.0.1',8000)
c=socket.socket()
c.connect(ip_bind)
def f(n):
while True:
data=str(n)
c.send(bytes(data,encoding='utf8'))
data = c.recv(1024)
print('服务端:',str(data,encoding='utf8'))
c.close()
x=[]
if __name__ == '__main__':
v=[]
#多线程实现并发客户端
# u=[]
# for i in range(100):
# p = threading.Thread(target=f, args=[str(i), ])
# p.start()
# u.append(p)
#
# for p in u:
# p.join()
# 多进程实现并发客户端
for i in range(100):
p = multiprocessing.Process(target=f,args=[i,])
p.start()
v.append(p)
for p in v:
p.join()
## 服务端
import sys
import time
import gevent
from gevent import socket
from gevent import monkey
monkey.patch_all()
#类似于Python中的黑魔法,把很多模块的阻塞的变成非阻塞的,
#比如socket中的rece 和send 都变
#所以,为了不阻塞
def server(port):
s=socket.socket()
s.bind(('127.0.0.1',port))
s.listen(2000)
while True:
cli,add=s.accept()
gevent.spawn(handle_request,cli)
#通过gevent的启动一个协程,把客户端的socket对象传进去
def handle_request(s):
try:
while True:
data=s.recv(1024)
print('收到的信息:',str(data,encoding='utf8'))
s.send(data)
if not data:
s.shutdown(socket.SHUT_WR)
#把和客户端的这个链接销毁。
except Exception as ex:
print(ex)
finally:
s.close()
if __name__ == '__main__':
server(8000)
Python 单线程下实现多个socket并发的更多相关文章
- python单线程下实现多个socket并发
先看服务端的代码 import sys # import socket import time import gevent from gevent import socket from gevent ...
- Python 37 基于多线程实现套接字 、gevent 、单线程下实现并发的套接字通信
一:基于多线程实现套接字 可添加多个客户端 from socket import * from threading import Thread def comunicate(conn): while ...
- 通过gevent实现单线程下的多socket并发
#通过gevent实现单线程下的多socket并发 服务器 #server side import sys import socket import time import gevent from g ...
- python全栈开发从入门到放弃之socket并发编程之协程
一.为什么会有协程 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情 ...
- python 单线程实现并发
单线程下支持并发(服务端): from gevent import spawn,monkey;monkey.patch_all() from socket import * def server(ip ...
- Python开发【笔记】:单线程下执行多个定时任务
单线程多定时任务 前言:公司业务需求,实例当中大量需要启动定时器的操作:大家都知道python中的定时器用的是threading.Timer,每当启动一个定时器时,程序内部起了一个线程,定时器触发执行 ...
- 生产者和消费者模型producer and consumer(单线程下实现高并发)
#1.生产者和消费者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.s ...
- Python开发【第九篇】: 并发编程
内容概要 操作系统介绍 进程 线程 协程 二. 进程 python并发编程之多进程理论部分 在python程序中的进程操作 运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...
- python单线程,多线程和协程速度对比
在某些应用场景下,想要提高python的并发能力,可以使用多线程,或者协程.比如网络爬虫,数据库操作等一些IO密集型的操作.下面对比python单线程,多线程和协程在网络爬虫场景下的速度. 一,单线程 ...
随机推荐
- React-基础总结
使用1. // js文件,第一部引入React(大写,不然保错) import React from 'react' // 创建数组 const arrList = Array.from({lengt ...
- Missing radix parameter 错误的解决办法
下载了Mint-Ui的example,使用npm run dev时发现如下报错: ERROR in ./packages/loadmore/src/loadmore.vue ✘ http://esli ...
- 面试官:你连RESTful都不知道我怎么敢要你?
目录 01 前言 02 RESTful的来源 03 RESTful6大原则 1. C-S架构 2. 无状态 3.统一的接口 4.一致的数据格式 4.系统分层 5.可缓存 6.按需编码.可定制代码(可选 ...
- HBase 基本入门
目录 一.简介 有什么特性 与RDBMS的区别 二.数据模型 三.安装HBase 四.基本使用 表操作 五.FAQ 参考文档 无论是 NoSQL,还是大数据领域,HBase 都是非常"炙热& ...
- CentOS 7下配置ISO镜像文件为本地yum源
环境限制外网怎么办?离线环境怎么解决依赖?yum源配起来,可以解决大部分包的安装^_^ 环境: 虚拟机:VMware Workstation Pro 12.x Linux系统版本:CentOS-7-x ...
- 最全 HTTP 安全响应头设置指南
销售“安全记分卡”的公司正在崛起,并已开始成为企业销售的一个因素.这些公司组合使用 HTTP 安全报头和 IP 信誉来进行评级.不过,在很大程度上,公司的得分取决于对外开放网站上设置的安全响应报头.本 ...
- Linux查看系统基本信息、版本信息等
Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号 1.uname -a (Linux查看版本当前操作系统内核信息) 2.cat /proc/version (L ...
- java程序员面试答题技巧
答题时,先答是什么,再答有什么作用和要注意什么(这部分最重要,展现自己的心得) 答案的段落分别,层次分明,条理清晰都非常重要,从这些表面的东西也可以看出一个人的 习惯.办事风格.条理等. 要讲你做出答 ...
- Tensorflow搭建CNN实现验证码识别
完整代码:GitHub 我的简书:Awesome_Tang的简书 整个项目代码分为三部分: Generrate_Captcha: 生成验证码图片(训练集,验证集和测试集): 读取图片数据和标签(标签即 ...
- Java基础IO类之字符串流(查字符串中的单词数量)与管道流
一.字符串流 定义:字符串流(StringReader),以一个字符为数据源,来构造一个字符流. 作用:在Web开发中,我们经常要从服务器上获取数据,数据返回的格式通常一个字符串(XML.JSON), ...