Python 如何以数据帧的形式从多处理池返回多个值?
对于Python 如何以数据帧的形式从多处理池返回多个值?,python,multiprocessing,pool,Python,Multiprocessing,Pool,对于arima我有一系列参数pqd,比如: [(0, 0, 0), (0, 1, 0), (0, 2, 0), (0, 3, 0), (1, 0, 0), (1, 1, 0), (1, 2, 0), (1, 3, 0), (2, 0, 0), (2, 1, 0), (2, 2, 0), (2, 3, 0)] 我想通过使用多处理的参数顺序来评估arima的性能。 然而,我有两个问题: eval函数有3个参数 eval函数返回2个结果 如何将错误和模型的结果作为数据帧返回 以
arima
我有一系列参数pqd
,比如:
[(0, 0, 0),
(0, 1, 0),
(0, 2, 0),
(0, 3, 0),
(1, 0, 0),
(1, 1, 0),
(1, 2, 0),
(1, 3, 0),
(2, 0, 0),
(2, 1, 0),
(2, 2, 0),
(2, 3, 0)]
我想通过使用多处理的参数顺序来评估arima的性能。
然而,我有两个问题:
from multiprocessing import Pool
#this computes error and return a model
def eval_model_parameters(a,b,order):
#use order PARAMETER somehow to compute model
error = a*b/2
model = a
return [error,model]
p = [0, 1 , 2]
d = [0, 1 , 2 ,3]
q = [0]
pdq = list(itertools.product(p, d, q))
p = Pool(7)
func = eval_model_parameters(1, 2, pdq)
res = p.map(func, pdq)
p.close()
我尝试这样做是为了将参数传递给函数
func = eval_model_parameters(1, 2, pdq)
这将返回结果
res = p.map(func, pdq)
但我明白了
---------------------------------------------------------------------------
远程回溯回溯(最近一次呼叫最后一次)
远程回溯:
"""
回溯(最近一次呼叫最后一次):
worker中第121行的文件“Anaconda3\lib\multiprocessing\pool.py”
结果=(True,func(*args,**kwds))
mapstar中第44行的文件“Anaconda3\lib\multiprocessing\pool.py”
返回列表(映射(*args))
TypeError:“列表”对象不可调用
"""
上述异常是以下异常的直接原因:
TypeError回溯(最近一次调用上次)
在里面
13 p=池(7)
14 func=评估模型参数(1、2、pdq)
--->15 res=p.map(func,pdq)
16 p.结束()
17
映射中的Anaconda3\lib\multiprocessing\pool.py(self、func、iterable、chunksize)
266在返回的列表中。
267 '''
-->268返回self.\u map\u async(func、iterable、mapstar、chunksize).get()
269
270 def星图(self、func、iterable、chunksize=None):
获取中的Anaconda3\lib\multiprocessing\pool.py(self,超时)
655返回自身值
656其他:
-->657提高自我价值
658
659 def_装置(自身、i、obj):
TypeError:“列表”对象不可调用
完成此操作的正确方法是什么?pool.map函数的第一个参数应该是可调用对象。在本例中,您自己调用了该函数,然后将结果传递给pool.map函数。 尝试将函数本身传递到pool.map,如下所示:
p.map(eval_model_parameters, pdq)
现在,当您更改上面的行并运行代码时,您将看到pdq list的tuple作为单个参数传递。
要解决这个问题,请遵循这个问题
希望这有帮助 明白了,但是参数a和b呢?它们将是pdq列表元组中的第一个和第二个值。你能详细说明一下吗?仍然没有得到这个想法。列表pdq由每个元组都有三个值的元组组成,当我们用这个元组映射某个函数时,这三个值将作为参数传递给该函数。好的,最后一个问题是如何从求值的函数返回多个值,可能是一个列表或类似的东西?
p.map(eval_model_parameters, pdq)