On Tue, 17 Mar 2009 18:03:59 +0100, Laszlo Nagy <gand...@shopzeus.com> wrote:

For whatever reason, you're ending up with a lot of open files and/or sockets
(and/or any other resource based on file descriptors).  That results in new
file descriptors having large values (>=1024).

You cannot use select() with such file descriptors.  Try poll() instead,
or Twisted. ;)

Poll is not good, because it does not wait.

This is not true.  You can accomplish just what you're doing with select()
using poll() instead.  Oops, but I forgot, Windows doesn't have poll(), so
that doesn't really help you.  There's WaitForSingleObject if you can depend
on pywin32, though.  It supports timeouts, just as select() does (in fact,
select() is a wrapper around WaitForMultipleObjects on Windows - the multi-
handle version of WaitForSingleObject).

[snip]

You are talking about twisted - can someone tell me how twisted does this?

Twisted does it by taking the call to low-level I/O routines out of your
hands and just doing them right on its own. ;)  It also doesn't use blocking
I/O calls, and it doesn't make any I/O calls unless it thinks they're going
to succeed immediately anyway.

It deals with the problem of allowing timely exits on Windows by waiting
up select frequently, which is just a hack to work around the bug I
mentioned in CPython on Windows.

[snip]

I would really like to know what other options I have to implement this efficiently. Is my approach bad?

I prefer the approach Twisted (and other libraries too) take.  Don't use
threads to multiplex I/O.  Use non-blocking I/O calls and select() or the
best platform-specific equivalent.


Or am I using the wrong language? I started to use threads heavily in the past months. Haskell might be a better choice for me, except that Python is much more elegant. :-)

I'm sure people will tell you that this is a good use of threads and that
Python is up to the task.  I think it's a bad use of threads, but with a
different approach, I still think Python is up to the task.

Jean-Paul
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to