Apache Beam конвейер не выполняет задачу параллельно с использованием Python - PullRequest
0 голосов
/ 06 ноября 2019

Я только начинаю работать с 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
...