Python 函数并行化问题(LSTM模型)
我有一个名为Python 函数并行化问题(LSTM模型),python,list,function,parallel-processing,Python,List,Function,Parallel Processing,我有一个名为fit_model的函数,它接受一个输入,dataset,对数据集执行一些预处理操作,并对其运行一个LSTM模型,最后返回一个数字。简单地说如下: def fit_model(dataset): do some preprocess on the dataset train the model on the dataset return a number import multiprocessing as mp results = [] pool =
fit_model
的函数,它接受一个输入,dataset
,对数据集执行一些预处理操作,并对其运行一个LSTM模型,最后返回一个数字。简单地说如下:
def fit_model(dataset):
do some preprocess on the dataset
train the model on the dataset
return a number
import multiprocessing as mp
results = []
pool = mp.Pool(mp.cpu_count())
results = pool.starmap(fit_model, [(my_list[i]) for i in range(0, 21)])
pool.close()
我还有一个名为my_list
的列表,其中包含21个数据集(每个数据集都以数据帧的形式)。当我想将函数并行化时,如下所示:
def fit_model(dataset):
do some preprocess on the dataset
train the model on the dataset
return a number
import multiprocessing as mp
results = []
pool = mp.Pool(mp.cpu_count())
results = pool.starmap(fit_model, [(my_list[i]) for i in range(0, 21)])
pool.close()
我得到这个错误:
"""
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/usr/lib/python3.6/multiprocessing/pool.py", line 47, in starmapstar
return list(itertools.starmap(args[0], args[1]))
TypeError: fit_model() takes 1 positional argument but 44 were given
"""
但我不知道有什么问题?同样,当我像这样运行函数时:
x=fit\u model(我的列表[4])
,或(0,21)范围内的任何其他索引,我没有收到任何错误。您能帮我解决这个问题吗?我认为您遇到的问题是如何实现starmap调用。此命令表示您正在尝试创建一个单独元组的列表,这些元组将作为它们自己的iterables:
[(my_list[i]) for i in range(0, 21)] # recreates your list [val 1, val 2, val 3, ...]
但是,这会再次生成初始列表。您可以使用一个尾随逗号来修复它,它确实创建了我认为您正在尝试创建的内容,如:
[(my_list[i], ) for i in range(0, 21)] # creates [(val 0), (val 1), (val 2) ...]
然而,这只是为您创建额外的代码,而我认为它根本不需要。我建议您使用地图而不是星图,如下所示:
import multiprocessing as mp
# no need to define results
pool = mp.Pool(mp.cpu_count())
results = pool.map(fit_model, my_list)
pool.close()
或者在我看来,是一种更像蟒蛇的方式:
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as pool:
results = pool.map(fit_model, my_list)