基于socket 实现单线程并发:
基于协程实现内IO的快速切换,我们必须提前导入from gevent import monkey;monkey pacth_all() 以为 gevent spawn 内部无法铺抓IO机制
基于socket 实现单线程并发 1.服务端: from gevent import monkey; monkey.patch_all() from gevent import spawn import socket def communicate(conn): # 信息交流层 while True: try: data = conn.recv(1024) if len(data) == 0: break print(data) conn.send(data.upper()) except BaseException: break conn.close() def server(): server = socket.socket() server.bind(('127.0.0.1', 8080)) server.listen(5) while True: conn,addr = server.accept() spawn(communicate, conn) if __name__ == '__main__': t = spawn(server) t.join()
2客户端 我们模拟了500个线程 虽然基于cpython 我们只能在一个进程 下面开一个线程 但是我们利用协程的机制 巧妙的 躲过的外部对于我们IO的捕获,在代码层内部实现来回切换 从而实现了单线程下的高并发 from threading import Thread,current_thread import socket import socket def client(): client = socket.socket() client.connect(('127.0.0.1',8080)) n = 1 while True: data = '%s%s'% (current_thread().name, n) print(data) n += 1 client.send(data.encode('utf-8')) info = client.recv(1024) print(info.decode('utf-8')) if __name__ == '__main__': for i in range(500): t = Thread(target=client) t.start()