On Friday, 22 November 2013 18:15:10 UTC-8, Roy Smith wrote: > In article <b8d42424-e0ab-4595-9c87-25e5c1b53...@googlegroups.com>, > > Bhanu Karthik <bhanukarthik2...@gmail.com> wrote: > > > > > please help me.. what does the following line do? > > > > > > read_sockets,write_sockets,error_sockets = > > > select.select(CONNECTION_LIST,[],[]) > > > > This is a little tricky. > > > > First,read the docs at http://docs.python.org/2/library/select.html. > > There's a lot of complicated stuff there, but just concentrate on the > > description of the select.select() call for now. > > > > Imagine a process which has a lot of network connections open. A great > > example would be something like a MUD (Multi User Dungeon). You've got > > one server process(*) and a bunch of clients which have all made TCP > > connections over individual sockets. > > > > Each client will be sending commands asynchronously, and the server > > needs to handle this. You need some way to figure out which of those > > sockets have something that's been sent to you (which you need to > > process) and which are just sitting idle. That's where select() comes > > in. It gives you a way to say, "Here's a list of sockets. Sleep until > > one of them has something available for me to read, and let me know > > which one." > > > > One bit of complication is that you can also check for sockets which are > > ready to be written on, and sockets which have some sort of error > > condition. That's why the call returns a 3-tuple. But, for now, let's > > just concentrate on reading. > > > > Here's a very simplistic server which uses select(): > > > > import socket > > import select > > > > sock = socket.socket() > > sock.bind(('localhost', 23000)) > > sock.listen(10) > > > > # Accept four connections. > > connections = [] > > for i in range(4): > > s, addr = sock.accept() > > print "Got connection from %s" % str(addr) > > connections.append(s) > > > > while True: > > readable, _, _ = select.select(connections, [], []) > > print "ready for reading: %s" % readable > > for s in readable: > > data = s.recv(1024) > > print "Read from %s: %s" % (s, data) > > > > You can write a little client which connects to this (I've got one I > > used for testing, but I'll leave it to you to write one yourself as an > > exercise). Connect four clients, and have them send some input in > > random order. > > > > Actually, this server has a bug (which you'll discover as soon as you > > close one of the four connection), but it should serve to illustrate the > > basic concept. > > > > > > (*) I'm not sure if real MUDs are programmed this way, but it's a > > plausible architecture. For simplicity sake, I'm assuming a > > single-threaded server.
Thank you for your reply.your reply helped me figure out concept. -- https://mail.python.org/mailman/listinfo/python-list