zoukankan      html  css  js  c++  java
  • 单线程下实现并发的套接字

    from gevent import monkey;monkey.patch_all()
    from socket import *
    from gevent import spawn #导入spawn之前一定要传入monkey
    #俩个io密集型任务
    def comun(conn):
        while True: # 链接循环
            try:
                data = conn.recv(1024)
                if len(data) == 0: break
                conn.send(data.upper())
            except ConnectionResetError:
                break
        conn.close()
    
    def server(ip,port,backlog=5):
        server=socket(AF_INET,SOCK_STREAM)
        server.bind((ip,port))
        server.listen(backlog)
    
        while True:  # 链接循环
            conn,client_addr= server.accept()
            print(client_addr)
    
            # 通信
            spawn(comun,conn)
    
    if __name__ == '__main__':
        g1=spawn(server,'127.0.0.1',8080)
        g1.join()
    服务端
    from threading import Thread,current_thread  #开线程
    from socket import *
    
    def client():
        client= socket(AF_INET,SOCK_STREAM)
        client.connect(('127.0.0.1',8080))
        n=0
        while True:
            msg='%s say hello %s' %(current_thread().name,n)
            n+=1
            client.send(msg.encode('utf-8'))
            data=client.recv(1024)
            print(data.decode('utf-8'))
    
    if __name__ == '__main__':
        for i in range(500):
            t=Thread(target=client)
            t.start()
    客户端

    实现了在单线程下承受500个并发量

  • 相关阅读:
    街边的泥人张
    没事试试50mm1.4
    WWOOF介绍一下,但貌似我们利用不了
    护照和签证
    071205还是晴photo
    忘年旅行
    12月6日大雪
    12月5日
    周六
    071204 晴
  • 原文地址:https://www.cnblogs.com/zhouhao123/p/11139353.html
Copyright © 2011-2022 走看看