[Twisted-Python] newbie confusion - puzzling reactor response

Mark Bailey mebly5343 at gmail.com
Wed Feb 10 14:44:12 EST 2010


Hi Rich:

Try removing the "reactor.addReader(self)" call from "__init__" and see what
happens.  That call is made when "r" is created in

   r = inputFile('/etc/group')

and immediately after that you are calling
   reactor.addReader(r)

So, you are calling reactor.addReader() twice on the same instance.

Mark

On Wed, Feb 10, 2010 at 2:24 PM, K. Richard Pixley <rich at noir.com> wrote:

>  I don't think so.  I believe the reactor is actually added during the
> import.  (I learned this as I discovered that reactors can't be restarted,
> which means you have to manually create a new one as a fixture for simple
> unittest work.)
>
> I looked through the code and there's a call in the reactor to fileno
> immediately after the call to doRead.  It seems to be attempting to check
> for file descriptors which broke during the read, but I think that's a
> mistake.  (Or at least, I'm confused about how else to do it).  Seems to me
> that the only time my object has control in order to remove itself is during
> doRead.  So I'm thinking that either...
>
> a) there's some other way to close out my object that I just haven't
> discovered or
>
> b) the code which checks the file descriptor, (which may have been closed),
> after doRead is doing so mistakenly.
>
> For now, in my real code, I'm just leaving the file descriptor.  But I'd
> like to know how this is intended to be used.
>
> --rich (still a newbie)
>
> Mark Bailey wrote:
>
> Hi:
>
> Aren't you adding two readers?  One is added in the __init__ method of
> inputFile, the other in the test code.
>
> I'm also a newbie so maybe I'm equally confused...
>
> On Tue, Feb 9, 2010 at 8:47 PM, K. Richard Pixley <rich at noir.com> wrote:
>
>> I'm confused be the response I get to the attached program.
>>
>> In a nutshell, I'm building a reader, attaching it with addReader, later
>> removing it with removeReader.  And I'm getting this:
>>
>> time python test_reactor.py
>> Traceback (most recent call last):
>> Failure: twisted.internet.error.ConnectionFdescWentAway: Uh:
>> Filedescriptor went away.
>>
>> Which seems to be telling me that I don't know as much yet as I'd hoped.
>>
>> Why would the reactor care about a closed file descriptor that isn't even
>> in it's interest set?
>>
>> --rich
>>
>> #!/usr/bin/env python
>> # -*- coding: utf-8 -*-
>>
>> import os
>>
>> from zope.interface import implements
>> from twisted.internet import reactor
>> from twisted.internet.interfaces import IReadDescriptor
>>
>> class inputFile(object):
>>    implements(IReadDescriptor)
>>
>>    def __init__(self, filename):
>>        self.filename = filename
>>        self.filedes = os.open(filename, os.O_RDONLY | os.O_NONBLOCK)
>>        reactor.addReader(self)
>>
>>    def fileno(self):
>>        return self.filedes
>>
>>    def connectionLost(self, reason):
>>        raise reason
>>
>>    def logPrefix(self):
>>        return 'inputFile'
>>
>>    def doRead(self):
>>        reactor.removeReader(self)
>>        os.close(self.filedes)
>>        self.filedes = -1
>>        reactor.stop()
>>
>> if __name__ == '__main__':
>>    r = inputFile('/etc/group')
>>    reactor.addReader(r)
>>    reactor.run()
>>
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>>
> ------------------------------
>
> _______________________________________________
> Twisted-Python mailing listTwisted-Python at twistedmatrix.comhttp://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20100210/e870621b/attachment.htm 


More information about the Twisted-Python mailing list