标签:
server
#!/usr/bin/env python import selectors import socket import time import threading sel = selectors.DefaultSelector() def echo(conn,cmd,filename): time.sleep(3) conn.send((cmd + ‘ ‘ + filename).encode()) def accept_client(sock,mask): conn,addr = sock.accept() print(‘conn:{},addr:{},mask:{}‘.format(conn,addr,mask)) # conn.setblocking(False) sel.register(conn, selectors.EVENT_READ, read_client) def read_client(conn,mask): data = conn.recv(1024).decode().strip() if data: if len(data.split(‘ ‘)) == 2: cmd = data.split(‘ ‘)[0] filename = data.split(‘ ‘)[1] t = threading.Thread(target=echo,args=(conn,cmd,filename)) #这里使用了线程,不然程序会变成串行的,执行一个客户端任务,sleep(3)然后再执行下一个客户端任务... t.start() # time.sleep(1) # conn.send((cmd + ‘ ‘ + filename).encode()) else: conn.send((‘usage: put filename ;get filename‘).encode()) else: print(‘{} closed‘.format(conn)) sel.unregister(conn) conn.close() server = socket.socket() server.bind((‘localhost‘,1235)) server.listen(12340) # server.setblocking(False) sel.register(server, selectors.EVENT_READ,accept_client) while True: events = sel.select() for key,mask in events: callable = key.data callable(key.fileobj,mask)
client
#!/usr/bin/env python import socket import threading import time ip_port = (‘localhost‘,1235) socks = [socket.socket() for i in range(1000)] m = b‘get abc‘ time_list = [] def run(s): s.connect(ip_port) s.send(m) data = s.recv(1024) print(s,data) start_time = time.time() for s in socks: t = threading.Thread(target=run,args=(s,)) t.start() time_list.append(t) for i in time_list: i.join() print(‘time:{}‘.format(start_time - time.time()))
2. 实现并发put和get文件
标签:
原文地址:http://www.cnblogs.com/fuckily/p/5924672.html