[Twisted-Python] Advice sought on application evolution
Tristan Seligmann
mithrandi at mithrandi.net
Sat Mar 22 09:54:44 EDT 2008
* Matthew Glubb <matt at madebykite.com> [2008-03-22 09:47:09 +0000]:
> Each successive call of x.bar must wait for the previous one to
> complete. Whereas in the following example x.bar() is called in parallel
> for each item in self.someList:
>
> def foo(self):
> d = defer.Deferred()
> self._done_count = 0
> for x in self.somelist:
> x.bar().addCallback(self._done_bar, d)
> return d
>
> def _done_bar(self, result, d):
> self._done_count = self._done_count + 1
> if self._done_count == len(self.somelist):
> d.callback(result)
Of course, you can also write this something like this (using
inlineCallbacks style just to save me some typing):
def foo(self):
ds = []
for x in self.somelist:
ds.append(x.bar())
for d in ds:
yield d
# Even better would probably be:
# yield gatherResults(ds)
But yes, the danger of accidentally serializing operations that don't
need to be serialized, and not even realising it, is one of the problems
with this coding style.
--
mithrandi, i Ainil en-Balandor, a faer Ambar
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://twistedmatrix.com/pipermail/twisted-python/attachments/20080322/5777f2b5/attachment.pgp
More information about the Twisted-Python
mailing list