Love prefect! but for workflows involving concurrency, Prefect code needs to get somewhat invasive.
Prefect relies on prefect.task()-wrapped methods as the lowest granularity of concurrency in a program, and requires you to use the (somewhat immature) prefect task APIs to implement that concurrency.
more on this complaint here: https://austinweisgrau.github.io/migrating-to-prefect-part-3...