Я только начинаю работать с Apache Beam с использованием Python. У меня есть задача, которую я хочу выполнить параллельно, но по какой-то причине она выполняется последовательно. Есть ли что-то, что я полностью неправильно понял?
В следующем примере я хочу, чтобы RunInParallel
выполнялся одновременно. Для обработки DoFn
требуется 2 секунды, поэтому я ожидаю, что следующий конвейер завершится через 2 секунды. Однако это занимает 5 раз 2 секунды.
import apache_beam as beam
import time
from apache_beam.options.pipeline_options import PipelineOptions
class RunInParallel(beam.DoFn):
def process(self, element, *args, **kwargs):
time.sleep(2)
return [int(time.time())]
p = beam.Pipeline(options=PipelineOptions())
(p
| 'Create tasks' >> beam.Create([i for i in range(5)])
| "Run task" >> beam.ParDo(RunInParallel())
| "Print timestamp" >> beam.Map(print)
)
# Run the pipeline
res = p.run()
Выход для указанного выше конвейера равен
1573065709
1573065711
1573065713
1573065715
1573065717