We have a similar use case, and our prefect tasks use an external dask executor so that we have a fixed number of tasks running in parallel at any one time. Each task grabs a portion of the data, processes it, and saves it out. You can see our schematic below and it seems to work pretty well 🙂 The tasks are getting parameters, sanitising them and then a collection of getdata/process/save