我有一个任意函数,假设它的参数是一个文件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))
一种方法是获取给定文件中存在的所有文件的完整路径folder_id(i)
。然后,您可以将此file_paths
和传递func
给runInParallel
,然后将该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] 删除。
我来说两句