doing a lot of networking in parallel is usually not a good idea. You'll get rapidly into scalability and thrashing issues. you should consider to add some kind of rate limiting in startUpload.

            sem = defer.DeferredSemaphore(self.maxTransfers)