通过gevent实现socket的多并发

server 端:

import gevent
from gevent import socket, monkey monkey.patch_all() #进行IO标记 def server(port):
s = socket.socket()
s.bind(('localhost', port))
s.listen()
while True:
conn, addr = s.accept()
gevent.spawn(handle, conn) #一接收信号就进行IO切换 def handle(conn):
try:
data = conn.recv(1024)
print(data)
conn.send(data)
if not data:
conn.shutdown(socket.SHUT_WR) #如果没有数据就关掉socket
except exception as ex:
print(ex)
finally:
conn.close() if __name__=='__main__':
server(8000) client 端:
import socket, time

client = socket.socket()
client.connect(('localhost', 6000))
while True:
data = input('>>')
client.send(data.encode('utf-8'))
if not data:
break d = client.recv(1024)
print('recv:', d.decode())

gevent 实现单线程下的socket链接的更多相关文章

  1. Python 37 基于多线程实现套接字 、gevent 、单线程下实现并发的套接字通信

    一:基于多线程实现套接字 可添加多个客户端 from socket import * from threading import Thread def comunicate(conn): while ...

  2. 通过gevent实现单线程下的多socket并发

    #通过gevent实现单线程下的多socket并发 服务器 #server side import sys import socket import time import gevent from g ...

  3. gevent监测单线程下的io进行切换

    from gevent import monkey;monkey.patch_all() import gevent import time def eat(name): print('%s eat ...

  4. windows下Socket链接溢出

    最近在windows下使用通过多线程使用jdbc操作数据库,在线程数设置为5,并且每个线程执行完成后Sleep(1000),在这种情况下,竟然还会报错: java.net.SocketExceptio ...

  5. 协程--gevent模块(单线程高并发)

    先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...

  6. Linux和windows下内核socket优化项 (转)

    问题: No buffer space available Linux: vi /etc/sysctl.conf net.core.netdev_max_backlog = 30000  每个网络接口 ...

  7. Linux Socket - 基本socket链接

    0x0000 Linux Socket 函数 bind listen connect accept send recv read write 0x0001 Server绑不上ip 报错位置在bind函 ...

  8. socket链接的关闭连接与close和shutdown的区别

    TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN <-- ACK FIN_WAI ...

  9. windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

随机推荐

  1. vi文字处理器

    http://blog.csdn.net/wangloveall/article/details/22649331 摘要:vi是类UNIX命令行接口的标准文字处理软件,也是进行shell脚本程序编写与 ...

  2. Opengl研究4.0 走样与反走样

    Opengl研究4.0 走样与反走样 DionysosLai(906391500@qq.com) 2014-06-25          走样与反走样,也叫混淆与反混淆.所谓走样,是因为使用离散量(像 ...

  3. 【转】每天一个linux命令(9):touch 命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/10/30/2745714.html linux的touch命令不常用,一般在使用make的时候可能会用到 ...

  4. Oracle ASM 详解

    ASM:Automatic Storage Management, 是Oracle 主推的一种面向Oracle的存储解决方案, ASM 和 RDBMS 非常相似,ASM 也是由实例和文件组成, 也可以 ...

  5. RAC6——crsctl 和 srvctl 命令的区别理解

    Oracle Clusterware提供了丰富的工具,我们把常用的工具按照rac的四层机构做了划分,然后分别介绍: 节点层: olsnodes 参数-n -i -p 网络层: oifcfg 四个子命令 ...

  6. php curl上传文件$_FILES为空问题

    php使用curl上传文件,代码如下: 发送的代码(完全是官方的示例) <?php /* http://localhost/upload.php:print_r($_POST);print_r( ...

  7. protobuf 协议 windows 下 java 环境搭建

    使用maven编译protobuf所需要的jar包 1. 安装配置maven (1)下载maven        http://maven.apache.org/    版本:apache-maven ...

  8. js和jquery判断该元素中是否有指定class

    <div class="test">test</div> var t = document.getElementsByClassName('test'); ...

  9. bzoj4471 bzoj4490 随机数生成器Ⅱ

    Description 继NOI2014后,小H又发现了一种新的生成随机数的方法.首先,给定三个随机种子P,C1,C2(C1≤C2)生成一个序列{xi},{xi}满足对于任意的i≥0,满足以下递推式X ...

  10. RDD之三:RDD创建方式

    RDD创建方式 1)从Hadoop文件系统(如HDFS.Hive.HBase)输入创建.2)从父RDD转换得到新RDD.3)通过parallelize或makeRDD将单机数据创建为分布式RDD. 4 ...