.def("add_successor", py::overload_cast<TaskPtr>(&Task::add_successor), py::call_guard<py::gil_scoped_release>(),
py::arg("op"), "Add a successor to this task.")
.def("remove_successor", py::overload_cast<TaskPtr>(&Task::remove_successor),
py::call_guard<py::gil_scoped_release>(), py::arg("op"), "Remove a successor of this task.")
.def("remove_all_successors", &Task::remove_all_successors, py::call_guard<py::gil_scoped_release>(),
"Remove all successors of this task.")
.def("add_successor", py::overload_cast<TaskPtr>(&Task::add_successor), py::call_guard<py::gil_scoped_release>(),
py::arg("op"), "Add a successor to this task.")
.def("remove_successor", py::overload_cast<TaskPtr>(&Task::remove_successor),
py::call_guard<py::gil_scoped_release>(), py::arg("op"), "Remove a successor of this task.")
.def("remove_all_successors", &Task::remove_all_successors, py::call_guard<py::gil_scoped_release>(),
"Remove all successors of this task.")