gevent 解决单线程内并发
如果再配合多线程,那么可以优化更进一步优化扛住高并发
服务器
from gevent import monkey, spawn; monkey.patch_all() # 使用gevent必须 调用
import socket
def communicate(conn):
while True:
try:
data = conn.recv(1024)
if not data:break
conn.send(data.upper())
except ConnectionResetError:
break
conn.close()
def server(ip, port):
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind((ip,port))
soc.listen(5)
while True:
conn, der = soc.accept()
spawn(communicate, conn) # 协程开启处理IO问题
soc.close()
if __name__ == '__main__':
g = spawn(server, '127.0.0.1', 8080) # 开启协程, 异步提交
g.join()
客户端
import socket
from threading import Thread,currentThread
def client():
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect(('127.0.0.1', 8080))
while True:
soc.send(('%s hello' % currentThread().getName()).encode('utf-8'))
data = soc.recv(1024)
print(data.decode('utf-8'))
soc.close()
if __name__ == '__main__':
for i in range(500): # 模拟500个 用户交互
t = Thread(target=client) # 线程开启
t.start()