Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用多处理并行运行函数,同时在python中迭代函数参数?_Python_File_Parallel Processing_Directory_Arguments - Fatal编程技术网

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

如何使用多处理并行运行函数,同时在python中迭代函数参数?,python,file,parallel-processing,directory,arguments,Python,File,Parallel Processing,Directory,Arguments,我有一个任意函数,它的参数是一个文件,比如说func(file(I))。我有不同的目录,比如说folder\u id1,folder\u id2,…,folder\u idn。在每个目录中都有一些文件(i),例如,在文件夹\u id2中有文件文件(1)、文件(2)、文件(3)-三个文件-每个目录都有不同数量的文件 我想使用多处理为特定文件夹内的每个文件(I)并行运行函数func(文件(I))。所以会是这样的: def runInParallel(funcs): proc = [] for

我有一个任意函数,它的参数是一个文件,比如说
func(file(I))
。我有不同的目录,比如说
folder\u id1,folder\u id2,…,folder\u idn
。在每个目录中都有一些
文件(i)
,例如,在文件夹\u id2中有文件
文件(1)、文件(2)、文件(3)
-三个文件-每个目录都有不同数量的文件

我想使用
多处理
为特定文件夹内的每个
文件(I)
并行运行函数
func(文件(I))
。所以会是这样的:

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)))
但是,我不知道如何将所有函数
func(file(I))
与函数
runInParallel()
的参数同时设置。一个选项是迭代文件夹
文件夹\u id(i)
中的文件
file(n)
,但它不会并行运行

有什么想法吗<代码>局部变量()

谢谢

编辑:


一种方法是获取给定
文件夹\u id(i)
中存在的所有文件的完整路径。然后,您可以将此
文件路径
func
传递到
并行运行
,然后将
func
并行应用到每个文件。 您还必须修改
func
函数,以便它可以将
file\u 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)
def runInParallel(file_paths, func):
    with Pool() as pool:
        results = pool.map(func, file_paths)
或者,您可以使用
multiprocessing.Pool
来简化此任务,而不是使用
Process

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)
def runInParallel(file_paths, func):
    with Pool() as pool:
        results = pool.map(func, file_paths)

更新(根据您的评论):

如果
modelo
是文件对象,则将
desagagadorlstm
方法更新为

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 })

我的函数
foo()
有一个参数,即文件。它类似于foo(modelo=file,df=df)。我之前设置的第二个参数,但它仍然要求第一个参数<代码>类型错误:DesagregadorStm()缺少1个必需的位置参数:“modelo”
定义DesagregadorStm(modelo,df,medicoes=96):model=load_model(modelo)model.summary()df=df X,y=f.separar_接口(df,n_steps=40)X=X.reshape(X.shape[0],2,20,X.shape[2])=y=y.reshape[0],40,1)test_predicts=model.predict(X).flatte()y=y.flatte()
您到底是如何调用此函数的?我收到了此消息:
NameError:未定义名称“df”