Warning
The torch.futures
package is a Prototype feature and subject to change.
This package provides a Future
type that encapsulates an asynchronous execution and a set of utility functions to simplify operations on Future
objects. Currently, the Future
type is primarily used by the Distributed RPC Framework.
class torch.futures.Future
Wrapper around a torch._C.Future
which encapsulates an asynchronous execution of a callable, e.g. rpc_async()
. It also exposes a set of APIs to add callback functions and set results.
done() → bool
[source]
Return True
if this Future
is done. A Future
is done if it has a result or an exception.
set_result(result: T) → None
[source]
Set the result for this Future
, which will mark this Future
as completed and trigger all attached callbacks. Note that a Future
cannot be marked completed twice.
result (object) – the result object of this Future
.
>>> import threading >>> import time >>> import torch >>> >>> def slow_set_future(fut, value): >>> time.sleep(0.5) >>> fut.set_result(value) >>> >>> fut = torch.futures.Future() >>> t = threading.Thread( >>> target=slow_set_future, >>> args=(fut, torch.ones(2) * 3) >>> ) >>> t.start() >>> >>> print(fut.wait()) # tensor([3., 3.]) >>> t.join()
then(callback)
[source]
Append the given callback function to this Future
, which will be run when the Future
is completed. Multiple callbacks can be added to the same Future
, and will be invoked in the same order as they were added. The callback must take one argument, which is the reference to this Future
. The callback function can use the Future.wait()
API to get the value.
callback (Callable
) – a Callable
that takes this Future
as the only argument.
A new Future
object that holds the return value of the callback
and will be marked as completed when the given callback
finishes.
>>> import torch >>> >>> def callback(fut): >>> print(f"RPC return value is {fut.wait()}.") >>> >>> fut = torch.futures.Future() >>> # The inserted callback will print the return value when >>> # receiving the response from "worker1" >>> cb_fut = fut.then(callback) >>> chain_cb_fut = cb_fut.then( >>> lambda x : print(f"Chained cb done. {x.wait()}") >>> ) >>> fut.set_result(5) >>> >>> # Outputs are: >>> # RPC return value is 5. >>> # Chained cb done. None
value(self: torch._C.Future) → object
wait() → T
[source]
Block until the value of this Future
is ready.
The value held by this Future
. If the function (callback or RPC) creating the value has thrown an error, this wait
method will also throw an error.
torch.futures.collect_all(futures: List[torch.jit.Future]) → torch.futures.Future[List[torch.jit.Future]]
[source]
Collects the provided Future
objects into a single combined Future
that is completed when all of the sub-futures are completed.
Returns a Future
object to a list of the passed in Futures.
>>> import torch >>> >>> fut0 = torch.futures.Future() >>> fut1 = torch.futures.Future() >>> >>> fut = torch.futures.collect_all([fut0, fut1]) >>> >>> fut0.set_result(0) >>> fut1.set_result(1) >>> >>> fut_list = fut.wait() >>> print(f"fut0 result = {fut_list[0].wait()}") >>> print(f"fut1 result = {fut_list[1].wait()}") >>> # outputs: >>> # fut0 result = 0 >>> # fut1 result = 1
torch.futures.wait_all(futures: List[torch.jit.Future]) → List
[source]
Waits for all provided futures to be complete, and returns the list of completed values.
© 2019 Torch Contributors
Licensed under the 3-clause BSD License.
https://pytorch.org/docs/1.7.0/futures.html