具有多个参数的多进程函数

问题描述 投票:0回答:1

我正在潜心研究python中的多处理世界。

在看了一些视频之后,我想到了一个问题,因为我的函数的性质。

这个函数有4个参数,其中第1个参数是一个要读取的文件,因此是一个列表。

  1. 第1个参数是一个要读取的文件,因此,这是一个要读取的文件列表。
  2. 下面2个参数是两个不同的字典。
  3. 最后一个参数是一个可选的参数 "debug_mode",需要设置为 "True"。
# process_data(file, signals_dict, parameter_dict, debug_mode=False)
file_list = [...]
t1 = time.time()
with concurrent.futures.ProcessPoolExecutor() as executor:
    executor.map(process_data, file_list)
t2 = time.time()

问题是:如何指定函数的其余参数?

先谢谢你

python python-multiprocessing concurrent.futures process-pool
1个回答
0
投票

ProcessPoolExecutor.map 文档很薄弱。Worker只接受一个参数。如果你的目标有一个不同的调用签名,你需要写一个中间的worker,它被传递给一个容器,并知道如何将其扩展到paramter列表中。文档中也没有明确说明,你需要等待作业完成后再关闭池。如果你启动作业并退出池上下文 with 子句,池被终止。

import concurrent.futures
import os

def process_data(a,b,c,d):
    print(os.getpid(), a, b, c, d)
    return a

def _process_data_worker(p):
    return process_data(*p)

if __name__ == "__main__":
    file_list = [["fooa", "foob", "fooc", "food"],
        ["bara", "barb", "barc", "bard"]]

    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = executor.map(_process_data_worker, file_list)

for result in results:
    print('result', result)

0
投票

你需要为每个进程创建一个包含参数的列表。

params_list = [[file1, dict1_1, dict2_1, True],
               [file2, dict1_2, dict2_2, True],
               [file3, dict1_3, dict2_3]]

然后,你可以像这样创建进程

executor.map(process_data, params_list)
© www.soinside.com 2019 - 2024. All rights reserved.