Python ApacheBeam和DirectRunner(SUBPROCESS_SDK)只使用一个worker,如何强制它使用所有可用的worker?

Python ApacheBeam和DirectRunner(SUBPROCESS_SDK)只使用一个worker,如何强制它使用所有可用的worker?,python,apache-beam,apache-beam-io,direct-runner,Python,Apache Beam,Apache Beam Io,Direct Runner,以下代码: def get_pipeline(workers): pipeline_options = PipelineOptions(['--direct_num_workers', str(workers)]) return beam.Pipeline(options=pipeline_options, runner=fn_api_runner.FnApiRunner(

以下代码:

def get_pipeline(workers):
    pipeline_options = PipelineOptions(['--direct_num_workers', str(workers)])
    return beam.Pipeline(options=pipeline_options,
                         runner=fn_api_runner.FnApiRunner(
                             default_environment=beam_runner_api_pb2.Environment(
                                 urn=python_urns.SUBPROCESS_SDK,
                                 payload=b'%s -m apache_beam.runners.worker.sdk_worker_main'
                                         % sys.executable.encode('ascii'))))

with get_pipeline(4) as pipeline:
  _ = (  
        pipeline
        | 'ReadTestData' >> beam.io.ReadFromParquet(input_files, columns=all_columns)
        | "write" >> beam.io.WriteToText("/tmp/txt2")
  )
仅使用4个可用辅助进程中的一个,并仅生成一个大输出文件(即使有许多输入文件)


如何强制Beam管道并行工作,即如何强制每个输入文件由不同的工作程序单独处理?

您使用的是哪个版本的Beam

我对beam 2.16.0也有同样的问题,但版本2.17.0似乎具有预期的行为


您可能希望尝试使用此版本,同时保持代码不变。

我也有同样的问题。在查看htop和Beam日志时,似乎只使用一个CPU内核。