[Twisted-Python] Reactors
James Y Knight
foom at fuhm.net
Thu Nov 18 12:55:42 MST 2004
On Nov 18, 2004, at 3:58 AM, Bob Ippolito wrote:
> The problem is that the classes that use file descriptors make certain
> assumptions that are only true for the default (and probably poll)
> reactors. Particularly, from memory, they don't have to tell the
> reactor when they want to lose connection, and they do something very
> crazy in order to determine when a TCP connection is established. In
> the case of cfreactor, a wrapper object needs to live on top of the
> sockets so that the reactor will wake up on activity, and without
> proper notifications these objects can't be disposed of.
Okay, I'm still unsure why this is necessary. Right now, the reactors
just get told when it should send notifications for a socket being
readable or writable. When a socket is closed, the reactor is told
stopReading/stopWriting. For all other reactors, that causes all
reactorstate associated with the socket to be disposed of. They just
know the user no longer wants to see notifications, for whatever
reason. That the reason is the socket closed doesn't matter. Why does
the CF reactor have to care? And, if it _really does_, would it not be
good enough to use a weakref to the Selectable with a callback?
QTReactor seems to have a similar architecture, with objects that live
on top of sockets, but it doesn't have the same crazy hacks. Of course,
since it's also failing tests, I don't know if it's necessarily a good
thing to point at. ;)
James
More information about the Twisted-Python
mailing list