基于协程池 实现并发的套接字通信

客户端:

from socket import *

client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1', 8080)) while True:
msg = input(">>>:").strip()
if not msg:break
client.send(msg.encode("utf-8"))
data = client.recv(1024)
print(data.decode("utf-8")) client.close()

服务端:

from gevent import monkey;monkey.patch_all()
import gevent
from gevent.pool import Pool
from socket import * def communicate(conn):
''' 通信功能 '''
while True:
try:
data = conn.recv(1024)
if not data:break
conn.send(data.upper()) except ConnectionResetError:
break conn.close() def server(ip,port):
''' 负责建立连接 accept''' server = socket(AF_INET, SOCK_STREAM)
server.bind((ip,port))
server.listen(5) while True:
conn,addr = server.accept()
c = pool.spawn(communicate,conn) server.close() if __name__ == "__main__":
pool = Pool(5)
g = pool.spawn(server,'127.0.0.1', 8080)
g.join()

python 并发编程 基于gevent模块 协程池 实现并发的套接字通信的更多相关文章

  1. python 并发编程 基于gevent模块实现并发的套接字通信

    之前线程池是通过操作系统切换线程,现在是程序自己控制,比操作系统切换效率要高 服务端 from gevent import monkey;monkey.patch_all() import geven ...

  2. 基于ASIO的协程与网络编程

    协程 协程,即协作式程序,其思想是,一系列互相依赖的协程间依次使用CPU,每次只有一个协程工作,而其他协程处于休眠状态.协程可以在运行期间的某个点上暂停执行,并在恢复运行时从暂停的点上继续执行. 协程 ...

  3. 基于ASIO的协程库orchid简介

    什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的gevent/eventlet,为用户提供基于协程的并发模型. 什么是协程: 协程,即协作式程序,其思 ...

  4. 并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信

    1.协程并发:切+保存状态单线程下实现并发:协程 切+ 保存状态 yield 遇到io切,提高效率 遇到计算切,并没有提高效率 检测单线程下 IO行为 io阻塞 切 相当于骗操作系统 一直处于计算协程 ...

  5. 并发编程(六)--进程/线程池、协程、gevent第三方库

    一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可 ...

  6. 并发编程(六)——进程/线程池、协程、gevent第三方库

    进程/线程池.协程.gevent第三方库 一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上 ...

  7. python 并发编程 协程池

    协程池 from gevent.pool import Pool from gevent import monkey;monkey.patch_all() import gevent from gev ...

  8. Python 通过gevent实现协程

    #coding:utf-8-*- '''协程(coroutine)又称微线程.纤程,是一种用户级的轻量级线程.协程有自己的寄存器上下文和栈.携程调度时,将寄存器上下文和栈 保存,在切换回来的时候恢复保 ...

  9. 并发编程中死锁、递归锁、进程/线程池、协程TCP服务器并发等知识点

    1.死锁 定义; 类似两个人分别被囚禁在两间房子里,A手上拿着的是B囚禁房间的钥匙,而B拿着A的钥匙,两个人都没法出去,没法给对方开锁,进而造成死锁现象.具体例子代码如下: # -*-coding:u ...

随机推荐

  1. windows2012下一端口多网站 Apache配置

    援引自https://www.cnblogs.com/huangtailang/p/6026828.html 1.在httpd.conf文件里启用虚拟主机功能,即去掉下面配置项前面的# #LoadMo ...

  2. php和http协议

    http协议:电脑与电脑,网络与网络之间传输需要的一些条件: 比如网线互联,能相互找到ip地址(tcp/ip: b/s结构一定要遵循http协议): 报文都要有报头,要给谁传数据,要传什么数据,传什么 ...

  3. CSS3的多列属性

    CSS3 可以将文本内容设计成像报纸一样的多列布局 ㈠CSS3 多列属性 ㈡column-count 属性 ⑴语法:column-count: number|auto; ⑵值:          ㈢c ...

  4. C# 输出双引号

    Response.Write("前一页面的标题是:\"" +Page.PreviousPage.Title.ToString()+"\"") ...

  5. js中的“==”与“===”的区别

    console(34 == "34")  输出true console(34 === "34")  输出false 因此,==  只判断值,不判断类型,实际上里 ...

  6. R_Studio(癌症)数据连续属性离散化处理

    对“癌症.csv”中的肾细胞癌组织内微血管数进行连续属性的等宽离散化处理(分为3类),并用宽值找替原来的值 癌症.csv setwd('D:\\data') list.files() dat=read ...

  7. python虚环境

    有的项目使用tornado框架比较好,有的用Django框架比较好,容易发生冲突,这个时候可以建立一个虚拟的python环境. 安装virtualenv包 进入项目所在目录,执行命令 virtuale ...

  8. sqli-labs(45)

    基于报错的password处的')闭合注入 就是没有报错信息 payload和43关一样的构造

  9. 在oracle数据库里创建自增ID字段的步骤

    CREATE TABLE ADVICE ( ID INT NOT NULL, ACTIVE NOT NULL, TYPE INT NOT NULL, MSG ) NOT NULL, ADVICE ) ...

  10. 20175215 2018-2019-2 第一周Linux虚拟机环境调试及java程序调试学习总结

    一.Linux虚拟机的java环境调试 之前直接在终端中使用export直接配置java的运行环境,导致每次终端被重启的时候都要重新配置java的运行环境,直到看到老师的博客Intellj IDEA ...