Skip set_result if the future is done (#11256)

This commit is contained in:
Simon Mo
2020-10-11 22:33:58 -07:00
committed by GitHub
parent f9a29a6d26
commit 0d09a17c64
+8
View File
@@ -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)