zoukankan      html  css  js  c++  java
  • 基于协程实现并发的套接字通信

    服务端:

    from gevent import monkey,spawn;monkey.patch_all()
    from threading import Thread
    from socket import *
    
    def talk(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,backlog=5):
        s = socket()
        s.bind((ip,port))
        s.listen(backlog)
    
        while True:
            conn, addr = s.accept()   #建连接
            print(addr)
    
            # 通信
            g=spawn(talk,conn)     #提交一个协程任务,进行通讯。在多个客户端之间来回切换
                                 #切的速度非常快,多个客户端都得到及时响应
    
        s.close()
    
    if __name__ == '__main__':
        spawn(server,'127.0.0.1',8080).join()
        # server(('127.0.0.1',8080))   #和上面一步效果相同

    客户端:

    from threading import Thread,current_thread
    from socket import *
    
    import os
    
    def client():
        client = socket()
        client.connect(('127.0.0.1', 8080))
    
        while True:
            data = '%s hello' % current_thread().name
            client.send(data.encode('utf-8'))
            res = client.recv(1024)
            print(res.decode('utf-8'))
    
    
    if __name__ == '__main__':
        for i in range(1000):    #建500个线程连接服务端进行通信,相当于并发500个客户端
            t=Thread(target=client)
            t.start()
  • 相关阅读:
    如何入门深度学习
    机器学习之激活函数
    轻量化模型之SqueezeNet
    聚类算法之MeanShift
    目标检测之RefineDet
    语义分割之RefineNet
    数学基础之高斯核函数
    目标检测之人脸识别
    梯度下降算法及优化方法
    机器学习高阶训练营知识点一览
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/11783714.html
Copyright © 2011-2022 走看看