Check out ProcessPoolExecutor [0] (and ThreadPoolExecutor) too for an easy way to spin up a bunch of tasks and wait for them to complete.
[0] https://docs.python.org/3/library/concurrent.futures.html#pr...
[0] https://docs.python.org/3/library/concurrent.futures.html#pr...