Зачем вам нужно, чтобы эти функции запускались одновременно?
Beam / Dataflow возьмет ваш график и попытается оптимизировать вещи, которые могут работать в одном потоке.Это называется оптимизацией fusion и упоминается в статье Flume Java .
. Дело в том, что, как правило, более эффективно запускать эти функции по одной наодин и тот же поток, а не для обмена данными между несколькими потоками обработки или виртуальными машинами для распараллеливания обработки.
Если ваши функции должны выполняться более или менее параллельно, вы можете добавить beam.Reshuffle
преобразование перед преобразованием нисходящего потока:
data = (p
| beam.io.ReadFromPubSub(topic)
| beam.Map(parse_messages))
# After the data has been shuffled, it may be consumed by multiple workers
data | beam.Reshuffle() | beam.ParDo(Fun1())
data | beam.Reshuffle() | beam.ParDo(Fun2())
data | beam.Reshuffle() | beam.ParDo(Fun3())
Дайте мне знать, если я могу добавить некоторые детали в этом.