Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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_Multiprocessing_Pool - Fatal编程技术网

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的性能。 然而,我有两个问题:

  • eval函数有3个参数
  • eval函数返回2个结果
  • 如何将错误和模型的结果作为数据帧返回

    以下是我尝试过的:

    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)