zoukankan      html  css  js  c++  java
  • python 并发编程 基于gevent模块实现并发的套接字通信

    之前线程池是通过操作系统切换线程,现在是程序自己控制,比操作系统切换效率要高

    服务端

    from gevent import monkey;monkey.patch_all()
    import gevent
    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 = gevent.spawn(communicate,conn)
    
        server.close()
    
    
    if __name__ == "__main__":
        g = gevent.spawn(server,'127.0.0.1', 8080)
        g.join()

    客户端给服务端发送500个并发量,会看到一直不停的收消息

    from socket import *
    from threading import Thread
    from threading import current_thread
    
    
    def client():
        client = socket(AF_INET, SOCK_STREAM)
        client.connect(('127.0.0.1', 8080))
    
        while True:
            client.send(("%s say helo" % current_thread().getName()).encode("utf-8"))
            data = client.recv(1024)
            print(data.decode("utf-8"))
    
        client.close()
    
    if __name__ == "__main__":
        for i in range(500):
            t = Thread(target=client,)
            t.start()
  • 相关阅读:
    从Pycharm说起
    前端工程师小A学习JS的旅程
    模板引擎开发(一)
    Bootstrap01
    Passbook详解与开发案例
    DLL文件知多少?
    C#中的索引器的简单理解和用法
    python 的列表遍历删除
    Node.js与Golang使用感受与小结1
    解决设计中的两难问题
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/11179013.html
Copyright © 2011-2022 走看看