[Twisted-Python] Twisted CallLater: Advanced Usage
Bob Ippolito
bob at redivi.com
Sun Jul 13 14:47:38 MDT 2003
On Sunday, Jul 13, 2003, at 08:24 America/New_York, Moshe Zadka wrote:
> from __future__ import generators
> def os_path_walk(path, visit, arg):
> d = defer.Deferred()
> def walk(path):
> files = os.listdir(path)
> visit(arg, path, files)
> for file in files:
> yield None
> if os.path.isdir(file):
> for _ in walk(os.path.join(path, file):
> pass
> next = walk(path).next
> def caller():
> try:
> next()
> except StopIteration:
> d.callback(None)
> except:
> d.errback(sys.exc_info()[1])
> else:
> reactor.callLater(0, caller)
> caller()
> return d
This is close to what I did when I wrote 'flow' (different from cce's),
except I did the "caller" phase as a function-wrapper (akin to
staticmethod or classmethod), and I made it smarter, such that it could
return a value, get the result of a deferred (the next() wouldn't
happen until the result of the deferred was ready), etc.
AFAIK, since cce's flow is in Twisted now, this example is better
served using that. Also, you should be showing people Failure()
instead of sys.exc_info()[1].
-bob
More information about the Twisted-Python
mailing list