The example bellow shows how to execute 3 async functions and after all are finished, final_function()
is called.
def final_function():
print('All features done')
with ThreadPoolExecutor() as executor:
future_1 = executor.submit(do_something)
future_2 = executor.submit(do_something)
future_3 = executor.submit(do_something)
multi_feature_done_callback([future_1, future_2, future_3], final_function)