在python中迭代函数参数时,如何使用多处理并行运行函数?

马龙·特谢拉(Marlon Teixeira)

我有一个任意函数,假设它的参数是一个文件func(file(i))假设我有不同的目录folder_id1, folder_id2, ..., folder_idn每个目录中都有一定数量的files(i),例如,在folder_id2内部有文件file(1), file(2), file(3)-三个文件-每个目录具有不同数量的文件。

我想使用并行为func(file(i))每个file(i)特定文件夹内的函数运行该函数multiprocessing所以会是这样的:

def runInParallel(funcs):
  proc = []
  for func in funcs:
    p = Process(target=func)
    p.start()
    proc.append(p)
  for p in proc:
    p.join()


def foo(folder_id(i)):
    runInParallel(func(file(1)), func(file(2)), ..., func(file(n)))

但是,我不知道如何同时将所有函数设置为functionfunc(file(i))的参数runInParallel()一种选择是遍历Folderfile(n)内的文件folder_id(i),但随后不会并行运行。

任何想法?Locals()

谢谢

编辑:

def interface(id, number):
    directory_name = f"{str(id)}_site_{str(number)}"


    relative_path = os.getcwd()

    file_path = os.path.join(relative_path, "output")
    output_directory = os.path.join(file_path, directory_name)
    os.chdir(output_directory)
    df = np.load('Principal.npy')
    print(df.shape)

    model_directory = os.path.join(relative_path, "modelos", directory_name)
    paths = [os.path.join(model_directory, filename) for filename in os.listdir(model_directory)]
    file_path = [path for path in paths if os.path.isfile(path)]


    f.runInparallel(paths, tms.desagregadorLSTM(, df=df))
Shubham Sharma

一种方法是获取给定文件中存在的所有文件的完整路径folder_id(i)然后,您可以将此file_paths传递funcrunInParallel,然后将该func应用于每个文件并行。您还必须修改func函数,使其可以file_path作为参数。这是有助于完成此任务的代码,

import os
from multiprocessing import Process

def runInParallel(file_paths, func):
    proc = []
    for path in file_paths:
        p = Process(target=func, args=(path,))
        p.start()
        proc.append(p)

    for p in proc:
        p.join()


def foo(folder_id):
    paths = [os.path.join(folder_id, filename) for filename in os.listdir(folder_id)]
    file_paths = [path for path in paths if os.path.isfile(path)]

    runInParallel(file_paths, func)

或者,除了使用Process您可以使用它multiprocessing.Pool来简化此任务之外,

def runInParallel(file_paths, func):
    with Pool() as pool:
        results = pool.map(func, file_paths)

更新(根据您的评论):

如果modelo是文件对象,则将您的desagregadorLSTM方法更新

def desagregadorLSTM(path, df, medicoes=96): 
    with open(path, "r") as modelo:
        model = load_model(modelo) 
        model.summary() 
        df = df 
        X, y = f.separar_interface(df, n_steps=40)
        X = X.reshape(X.shape[0], 2, 20, X.shape[2]) 
        y = y.reshape(y.shape[0], 40, 1) 
        test_predictions = model.predict(X).flatten() 
        y = y.flatten()

电话,

runInParallel(file_paths, tms.desagregadorLSTM)

Alo更新,

p = Process(target=func, args=(path, df), kwargs={"medicoes": 96 })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用多处理并行运行函数

使用不同的参数并行运行函数-python

Python:如何并行运行python函数?

如何在 python 中以相同的参数并行运行一个函数?

Python 并行运行函数

如何并行运行带有参数的函数?

并行运行python进程(使用“多处理池”)进行批处理

在python中并行运行带有位置和可选参数的函数(后续)

多处理 - 如何并行运行多个进程

如何使用多处理并行化Theano函数?

如何多次并行运行单个python函数

当一个函数从另一个函数收集数据时,如何在 python 中并行运行两个函数?

每次X迭代后,如何跟踪python多处理池并运行函数?

如何使用clusterApply并行运行自己的函数几次

在 Python 中并行运行一个函数

如何在单独的进程中并行运行Scrapy Crawler Process?(多处理)

如何使jquery动画函数并行运行?

在Django中并行运行函数

如何在python中并行运行一个函数?

Python多重处理:并行运行多个for循环的每个迭代

BluebirdJS:使函数并行运行

在python中对具有多个参数的函数进行多处理

具有多个输入参数但只有一个可迭代的函数中的python多处理池

Python 多处理,带参数的函数

如何使用具有多个agruments的函数运行多处理python请求

如何创建触发器以并行运行多个函数(传递参数)

通过多处理使用池时如何在函数中获取进程号

如何在Python中为单个函数执行多处理?

如何在Python的串行函数中运行并行函数?