From 0d09a17c646de4cf7269ae673cf15f8945208313 Mon Sep 17 00:00:00 2001 From: Simon Mo Date: Sun, 11 Oct 2020 22:33:58 -0700 Subject: [PATCH] Skip set_result if the future is done (#11256) --- python/ray/_raylet.pyx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/python/ray/_raylet.pyx b/python/ray/_raylet.pyx index 8ddb8612f..6b5e9e10c 100644 --- a/python/ray/_raylet.pyx +++ b/python/ray/_raylet.pyx @@ -1515,11 +1515,19 @@ cdef void async_set_result(shared_ptr[CRayObject] obj, data_metadata_pairs, ids_to_deserialize)[0] def set_future(): + # Issue #11030, #8841 + # If this future has result set already, we just need to + # skip the set result/exception procedure. + if py_future.done(): + cpython.Py_DECREF(py_future) + return + if isinstance(result, RayTaskError): ray.worker.last_task_error_raise_time = time.time() py_future.set_exception(result.as_instanceof_cause()) else: py_future.set_result(result) + cpython.Py_DECREF(py_future) loop.call_soon_threadsafe(set_future)