[Twisted-Python] custom FTP server is blocking

Louis D. Burr ldanielburr at me.com
Thu Mar 19 14:38:30 MDT 2015


Hi Paul,

> On Mar 19, 2015, at 1:18 PM, Paul Wiseman <poalman at gmail.com> wrote:
> 
> I have some blocking going on in a custom twisted ftp server and I'm
> trying to pin point what exactly is doing it.
> 
> I think this line in openForReading on my FTPShell object could be the culprit:
> 
> _FileReader(urllib2.urlopen(result.link,timeout=settings.GLOBAL_TIMEOUT))
> 

Yeah, urllib2.urlopen() blocks, so this is at least one place in your code that will cause you a problem.

> (_FileReader is twisted.protocols.ftp._FileReader and result.link a url string)
> 
> I'm guessing urllib2.urlopen blocks resolving the domain and
> connecting? What would be the twisted equivalent way of providing a
> file like object of the download stream to the FileReader that
> wouldn't block?
> 

You probably want to use twisted.web.client.Agent for this, as it allows you to perform non-blocking http requests.  If you can live with buffering the http response body into, say, a tempfile or an io.BytesIO instance, then you can just pass that to _FileReader as the fObj argument and call it a day.


Hope this helps,

--
L. Daniel Burr





More information about the Twisted-Python mailing list