加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > Python > 正文

python并发原理(阻塞、非阻塞、epoll)

发布时间:2020-07-23 20:03:54 所属栏目:Python 来源:互联网
导读:在Linux系统中01 阻塞服务端特征:1对1,阻塞。1 import socket23 server = socket.socket() #生成套接字对象4 server.bind((0.0.0.0, 8000)) #套接字绑定ip和端口,变为监听套接字5 server.listen(5) #开始监听67 while True:8 conn, addr = server.accept()

在Linux系统中

01 阻塞服务端

特征:1对1,阻塞。

<div class="cnblogs_code">

  
 server = socket.socket()        
 server.bind((,8000))    
 server.listen(5)                    
 
      conn,addr = server.accept()        
     (                           data = conn.recv(1024              data == b  data == b                 (                 
                              (                                     

02 非阻塞服务端

特征:1对多,轮询,非阻塞,占用资源多。

<div class="cnblogs_code">

  
 server = socket.socket()        
 server.setblocking(False)       
 server.bind((,8001))  
 server.listen(5)                
 
 
 all_connection = []             
      
              conn,addr = server.accept()    
         conn.setblocking(False)         
         (               
 
 
     
     handle = all_connection.copy()  
      connection                       recv_data = connection.recv(1024                                            :                               
                 (                  all_connection.remove(connection)       
                      

03 epoll服务端

特征:1对多,通知机制,非阻塞,占用资源少;epoll:注册惰性事件回调。

<div class="cnblogs_code">

  selectors 
  
 epoll = selectors.EpollSelector()   
 server = socket.socket()            
 server.bind((,8082 server.listen(100 
 
 
      
     conn,addres = server.accept()  
 
 
     
       
 
 
 
  
     data = conn.recv(1024                             epoll.unregister(conn)  
 
 
 
 
  
 
 
      events = epoll.select()  
 
      key,mask          sock = key.fileobj      
         callback = key.data     
 
         
         callback(sock)      

04客户端

测试服务端。

<div class="cnblogs_code">

  
 client = client.connect((,8082 
      data = input(      recv_data = client.recv(1024     (recv_data.decode())

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读