多线程和协程都属于IO密集型,我通过以下用例测试多线程和协程的实际速率对比。
实例:通过socket客户端以多线程并发模式请求不同服务器端(这里服务器端分2种写法:第一种服务器通过协程实现,第二种服务器通过多线程实现)的访问速率
第一种服务器端写法:通过gevent实现
1 import socket 2 import gevent 3 from gevent import socket, monkey 4 monkey.patch_all() 5 6 def server(port): # socket服务器函数 7 s = socket.socket() 8 s.bind(('localhost', port)) 9 s.listen() 10 print('start server listen:') 11 while True: 12 conn, addr = s.accept() 13 gevent.spawn(handle_request, conn) # 协程模式实现交互 14 15 def handle_request(conn): 16 try: 17 while True: 18 data = conn.recv(1024) 19 print('recv:',data) 20 conn.send(data) 21 if not data: 22 conn.shutdown(socket.SHUT_WR) 23 except Exception as e: 24 print(e) 25 finally: 26 conn.close() 27 if __name__ == '__main__': 28 server(9999)