ANN: timeoutsocket.py --> v1.12 works with Python 2.0
Rick Lee
rwklee at home.com
Thu Jan 25 20:16:01 EST 2001
Thanks! Sounds like select() is the way to go. But, why not 1000 separate
threads, just for argument's sake?
- Rick
David Bolen wrote:
> Rick Lee <rwklee at home.com> writes:
>
> > I don't know how expensive threads are. If I have to implement a
> > server, it seems to me that I have to do recv() on every connection I
> > accept on a separate thread. Is that the way to go? Is there a more
> > efficient way?
>
> Typically an application like this uses select() to wait for any of
> its connections to have something to process, and then it processes
> those that it needs to. Some later Unix platforms also have a poll()
> call that can be more efficient.
>
> So you end up with a main loop (which may be a distinct thread if you
> have a GUI front-end) blocking in select() except when something needs
> to be done.
>
> > Asyncore? (In my application, all TCP connections are
> > very long lived, there can be up to 1000 simultaneous connections.)
>
> The asyncore module effectively packages up the loop around the select
> (or poll if available), and dispatches I/O to the appropriate socket
> connections as necessary. It'll also queue up output and send it out
> as it can from any of your socket writes.
>
> It's a little different coding model when you write your top level
> code using the library (since effectively you are writing small hooks
> to either keep the library fed with more data to send, or to drain
> data as it is received), but it can be very effective.
>
> As to whether you can support 1000 simultaneous connections
> (particularly dependent on how much data is flowing simultaneously)
> will depend on a lot of things (including your OS/kernel, memory,
> network stack and so on), but I do think it's technically feasible.
>
> You may also want to look at the open/free medusa framework
> (http://www.nightmare.com/medusa) which is layered on top of asyncore
> to provide services such as an HTTP server. If not useful directly, at
> least it will provide some examples of coding to asyncore.
>
> --
> -- David
> --
> /-----------------------------------------------------------------------\
> \ David Bolen \ E-mail: db3l at fitlinxx.com /
> | FitLinxx, Inc. \ Phone: (203) 708-5192 |
> / 860 Canal Street, Stamford, CT 06902 \ Fax: (203) 316-5150 \
> \-----------------------------------------------------------------------/
More information about the Python-list
mailing list