Hello Glyph,

thank's a lot for this advice! I thought I would have done right, and 
Twisted-style .. but the select FD trap wasn't on my radar.


The https://github.com/wulczer/txpostgres is very interesting. Guess I need to 
learn about interfaces.IReadWriteDescriptor
first to grasp it.

Regarding the broader picture: I cannot say I understand what you say 
completely.

" maximum file descriptor pollable by select()"

Is this *nix in general?

Does that only apply to select.select?

Or also: select.poll(), select.epoll(), select.kqueue() ?

How would implementing an IReadDescriptor circumvent the problem? By not using 
select(), but poll/epoll/kqeue?

In any case: we're running FreeBSD, so epoll() is out.

Is there even a kqueue-based Twisted reactor?

Sorry if helping me spawns new questions,

Thanks!
Tobias


for reference (don't know if it applies here):
psycopg since v2.2 has
http://initd.org/psycopg/docs/advanced.html#asynchronous-support


Von: twisted-python-boun...@twistedmatrix.com 
[mailto:twisted-python-boun...@twistedmatrix.com] Im Auftrag von Glyph
Gesendet: Donnerstag, 3. November 2011 23:54
An: Twisted general discussion
Betreff: Re: [Twisted-Python] adbapi / Postgres : LISTEN/NOTIFY and 
RealDictCursor

On Nov 3, 2011, at 6:18 PM, Tobias Oberstein wrote:


     while not self.stopped:
        if select.select([conn], [], [], self.timeout) == ([], [], []):
           pass


Please note that on high-volume servers, this is problematic, as 'conn' may be 
higher than the maximum file descriptor pollable by select().  So if you've 
tuned everything to be smart, use a high-volume reactor like epoll, and set all 
your ulimits correctly, you will still get tracebacks out of this code 
depending on random accidents of ordering.

This part of the logic might therefore be better implemented as a 
IReadDescriptor/IWriteDescriptor provider (i.e. a subclass of FileDescriptor), 
assuming you can ask your postgres binding to give you non-blocking reads and 
writes.  You're certainly not the first person to make this mistake though, 
<http://divillo.com/> gives the same advice :).

Also this would probably make a better patch for txpostgres 
<https://launchpad.net/txpostgres> than for Twisted itself, since support 
depends on specific database bindings.

-glyph

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to