[Twisted-Python] Re: How can ftpclient.py work?
John Goerzen
jgoerzen at complete.org
Sat Jul 26 21:34:54 MDT 2003
Thanks for the excellent information, Andrew. I have a few (really!)
follow-up questions:
Andrew Bennetts <andrew-twisted at puzzling.org> writes:
> In general, though, most protocols would simply be doing something like:
>
> def sendRequest(self, data):
> # ...
> self.transport.write(self.requestHeader)
> self.transport.write(data)
> # ...
>
> And the transport takes care of making sure the data is sent in the right
> order. You're probably thinking "but what if two calls are made to
> sendRequest at the same time? Isn't there a race condition?" The answer is
Oh sure, you guys just turn my whole approach to things on its side,
and now you know what I'm thinking? Well, you're right :-)
But, wouldn't the above code have blocking problems, especially over
slow links or for large values of data? (Say data is a 2MB string and
you're on a modem... does your UI freeze for 15 minutes? Or is
write() another layer above the system call that does some sort of magic?)
I guess what I'm thinking here is that switching from multi-threaded
to poll() or select() isn't a "get out of jail free" card. And while
I've written various C programs using select() and have a good idea
what the potential pitfalls are there, Twisted seems to live up to its
name just enough that I'm having a bit of trouble isolating them here :-)
> In the case of doc/examples/ftpclient.py, the commands Deferreds' have
> 'fail' added as an errback. It's defined as:
Ahh. I should have seen that.
>> Now, I'm assuming that these problems do not actually exist. Yet I
>> cannot work out why not. Can anybody shed some light?
>
> I hope I've shed some light for you -- let us know if you need more :)
Thanks -- all I need now is a small flashlight :-)
-- John
More information about the Twisted-Python
mailing list