def get_result(self):
return self.runner.pop_result(self.key)
+class WaitAll(YieldPoint):
+ """Returns the results of multiple previous `Callbacks`.
+
+ The argument is a sequence of `Callback` keys, and the result is
+ a list of results in the same order.
+ """
+ def __init__(self, keys):
+ assert isinstance(keys, list)
+ self.keys = keys
+
+ def start(self, runner):
+ self.runner = runner
+
+ def is_ready(self):
+ return all(self.runner.is_ready(key) for key in self.keys)
+
+ def get_result(self):
+ return [self.runner.pop_result(key) for key in self.keys]
+
+
class Task(YieldPoint):
"""Runs a single asynchronous operation.
self.stop()
self.run_gen(f)
+ def test_wait_all(self):
+ @gen.engine
+ def f():
+ (yield gen.Callback("k1"))("v1")
+ (yield gen.Callback("k2"))("v2")
+ results = yield gen.WaitAll(["k1", "k2"])
+ self.assertEqual(results, ["v1", "v2"])
+ self.stop()
+ self.run_gen(f)
+
class GenSequenceHandler(RequestHandler):
@asynchronous