Hello, > They do seem specialized for continuation-passing style programming > though. As far as I can tell from the docs > (http://python.net/crew/mwh/apidocs/twisted.internet.defer.Deferred.html > ), the only way to process the results of a Deferred is my installing > a callback.
Yes, but the last callback in the chain could trigger an Event, a Queue or any other synchronization object to which you could wait on, if you want something "synchronous" (despite the title of your original message: "asynchronous execution" :-)). > with ThreadedDeferredMaker(max_threads=5) as dm > deferreds = [] > for url in URLS: > deferred = dm.defer(load_url, url) > deferred. addCallbacks(print_success, print_failure, url=url) > deferred.unpause() > deferreds.append(deferred) If you have a bunch of deferreds and want your callback to trigger when all deferreds are finished/failed, you can use a DeferredList. A DeferredList is itself a Deferred so you can add callbacks to it (including one which makes things synchronous as explained above). http://twistedmatrix.com/documents/8.1.0/api/twisted.internet.defer.DeferredList.html (note that, as the doc says, "that you can still use a Deferred after putting it in a DeferredList". That is, you can react individually to each result to implement e.g. a progress indicator, and also react to the completion of all deferreds) Of course an all-synchronous API is still simpler to use for the use cases it is meant for. Regards Antoine. _______________________________________________ stdlib-sig mailing list stdlib-sig@python.org http://mail.python.org/mailman/listinfo/stdlib-sig