基于socket 实现单线程并发:

  基于协程实现内IO的快速切换,我们必须提前导入from gevent import monkey;monkey pacth_all() 以为 gevent spawn 内部无法铺抓IO机制

基于socket 实现单线程并发
    1.服务端:
from gevent import monkey; monkey.patch_all()
from gevent import spawn
import socket

def communicate(conn):
    # 信息交流层
    while True:
        try:
            data = conn.recv(1024)
            if len(data) == 0: break
            print(data)
            conn.send(data.upper())
        except BaseException:
            break
    conn.close()

def server():
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn,addr = server.accept()
        spawn(communicate, conn)

if __name__ == '__main__':
    t = spawn(server)
    t.join()

  

2客户端 我们模拟了500个线程 虽然基于cpython 我们只能在一个进程 下面开一个线程 但是我们利用协程的机制
巧妙的 躲过的外部对于我们IO的捕获,在代码层内部实现来回切换 从而实现了单线程下的高并发
from threading import Thread,current_thread
import socket
import socket

def client():
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    n = 1
    while True:

        data = '%s%s'% (current_thread().name, n)

        print(data)
        n += 1
        client.send(data.encode('utf-8'))

        info = client.recv(1024)
        print(info.decode('utf-8'))

if __name__ == '__main__':
    for i in range(500):
        t = Thread(target=client)
        t.start()

  

基于socket 实现单线程并发的更多相关文章

  1. 网络编程socket 结合IO多路复用select; epool机制分别实现单线程并发TCP服务器

    select版-TCP服务器 1. select 原理 在多路复用的模型中,比较常用的有select模型和epoll模型.这两个都是系统接口,由操作系统提供.当然,Python的select模块进行了 ...

  2. 一小时学会用Python Socket 开发可并发的FTP服务器!!

    socket是什么 什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...

  3. 基于socket.io的实时在线选座系统

    基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交 ...

  4. C#中级-从零打造基于Socket在线升级模块

    一.前言       前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...

  5. 基于socket构造c/s 架构软件

    1.socket作用 socket层介于应用层和传输层之间,它起着连接应用层和传输层的功能,同时它能连接应用层和网络层. socket把复杂的tcp/ip协议隐藏在socket接口后面,对用户来说,一 ...

  6. 基于Socket网络编程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a2011480169/article/details/73602708 博客核心内容: 1.Sock ...

  7. 【Socket】从零打造基于Socket在线升级模块

    一.前言       前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...

  8. 【redis】基于redis实现分布式并发锁

    基于redis实现分布式并发锁(注解实现) 说明 前提, 应用服务是分布式或多服务, 而这些"多"有共同的"redis"; (2017-12-04) 笑哭, 写 ...

  9. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案

    可使同一网络(局域网或广域网)内众多客户端,共享一个短信猫设备短信服务器进行短信收发,短信服务器具备对客户端的管理功能. 下面是某市建设银行采用本短信二次开发平台时实施的系统方案图: 在该方案中,考虑 ...

随机推荐

  1. java.util.Properties的使用及读取资源文件

    1.工具类Utils package com.oy.utils; import java.io.BufferedInputStream; import java.io.Closeable; impor ...

  2. asp.net 怎么上传文件夹啊,不传压缩包

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  3. PHPExcel组件编程spl_autoload_register

    E:\html\tproject\framework\modules\common\vendor\PHPExcel\Classes\PHPExcel.php <?php /** PHPExcel ...

  4. android平台上AES,DES加解密及问题

    在使用java进行AES加密的时候,会用到如下方法: SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 但是在andr ...

  5. http协议的深刻理解

    https://www.cnblogs.com/mayite/p/9095986.html

  6. Spring Cloud教程(九)应用程序上下文服务

    Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点.Spring Cloud建立在此之上,并添加了一些可能系统中所 ...

  7. CG-CTF | 密码重置2

    跟则提示走,美滋滋: 1.找到邮箱: 2.下载备份: 3.PHP弱类型,string与int用的是“==” ........这一行是省略的代码........ if(!empty($token)&am ...

  8. VMware 15 安装 macOS 10.14优质教程链接集合

    https://www.jianshu.com/p/25d2d781bd98 https://mp.weixin.qq.com/s/91Qc7L7E0xbVYXUcReUb_w https://blo ...

  9. Hyperledger交易流程

    Hyperledger Fabric Network中的角色 在Hyperledger中,由三种类型的角色: Client:应用客户端,用于将终端用户的交易请求发送到区块链网络: Peers:负责维护 ...

  10. LuceneNET全文检索封装

    一.源码特点       1.  Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎 ...