select 的 poll 异步处理

服务端

import socket,select,time host = "" port = 50000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((host,port)) s.listen(5) p = select.poll() p.register(s.fileno(),select.POLLIN|select.POLLERR|select.POLLHUP) while 1: print "q" results = p.poll(5000) for fd,event in results: if event == select.POLLIN: print "a" clientsock,clientaddr = s.accept() buf = clientsock.recv(8196) print ('okey') time.sleep(10) clientsock.close() print "no data coming"

 

客户端

 

import socket,select host = "localhost" port = 50000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) #s.send("coming from poll client") s.close()

我故意把  s.send 注释掉,也就是只连接服务端而不发送任何数据

 

服务端打印了 'q'  'a'  'okey'   

 

在服务端, 我使用了 time.sleep(10)  每一个连接我都阻塞10秒

 

客户端我不断的连接.  结果  服务端是处理完一个到一个.  看来poll 不是很适合  开发数据库类的并发等程序. 你说万一 一个连接读表锁表了. 那下一个连接就慢慢等了...

 

 

 

你可能感兴趣的:(select 的 poll 异步处理)