zoukankan      html  css  js  c++  java
  • Python 协程实现socket并发

    socket多并发
      socket可以实现单个客户端进行请求访问,它可以通过socketserver来实现并发功能呢,socketserver是通过启用多线程实现并发,在这里我们也可以通过gevent协程来实现单个线程下的多并发。
     
    socket server:
    import gevent
    from gevent import socket,monkey
    monkey.patch_all()
    
    
    def server(port):
        s = socket.socket()
        s.bind(('0.0.0.0', port))
        s.listen(500)
        while True:
            cli, addr = s.accept()
    
            # socket会创建一个线程链接,这里会交给协程处理
            # 链接后通过gevent启动一个协程
            # 接收一个函数,与链接实例参数
            gevent.spawn(handle_request, cli)
    
    
    # 所有交互都由handle处理
    def handle_request(conn):
        try:
            while True:
                data = conn.recv(1024)
                print("recv:", data)
                conn.send(data)
                if not data:
                    # 如果没有数据就关闭Client端
                    conn.shutdown(socket.SHUT_WR)
        # 如果出现异常就打印异常
        except Exception as  ex:
            print(ex)
        # 最后中断实例的conn
        finally:
            conn.close()
    if __name__ == '__main__':
        server(8001)
    socket client(多次开启,测试访问):
    import socket
    
    # 链接服务端
    HOST = 'localhost'    # The remote host
    PORT = 8001           # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    
    # 数据请求
    while True:
        msg = bytes(input(">>:"),encoding="utf8")
        s.sendall(msg)
        data = s.recv(1024)
        #print(data)
    
        # repr格式化输出
        print('Received', repr(data))
    s.close()
  • 相关阅读:
    MySQL Limit优化(转)
    MySQL数据库性能优化思路与解决方法(一转)
    Mysql占用CPU过高如何优化?(转)
    数据库方面两个简单实用的优化方法(转)
    硬盘扩容9999T
    python内涵段子爬取练习
    jmeter环境配置
    PyCharm3.0默认快捷键
    python3 操作页面上各种元素的方法
    python3 selenium webdriver 元素定位xpath定位骚操作
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8204664.html
Copyright © 2011-2022 走看看