Python中的简化并行网格搜索

Python中的简化并行网格搜索,python,multithreading,python-2.7,parallel-processing,Python,Multithreading,Python 2.7,Parallel Processing,好的,完全公开,我不是在做网格搜索,但是我能找到的关于我将要问的问题的最小示例可以(有一点保留)简化为网格搜索(以防你想知道为什么我没有提到numpy和friends) 我在Python中进行网格搜索,其中一个轴是离散的,另一个是连续的,但为了简单起见,假设我有以下内容: x_axis = ['linear', 'quadratic', 'cubic'] y_axis = range(1, 100) # simplification out = func_eval(fun) 我的函数的评估

好的,完全公开,我不是在做网格搜索,但是我能找到的关于我将要问的问题的最小示例可以(有一点保留)简化为网格搜索(以防你想知道为什么我没有提到numpy和friends)


我在Python中进行网格搜索,其中一个轴是离散的,另一个是连续的,但为了简单起见,假设我有以下内容:

x_axis = ['linear', 'quadratic', 'cubic']
y_axis = range(1, 100) # simplification
out = func_eval(fun)
我的函数的评估取决于轴和中间日志结构,因此,为了避免全局数据,我将函数定义为一个闭包

def get_function(xval, *args): 
    """ creates the closure that encapsulates thread local data 
    """
    log = { } # initialization depends on args
    def fun(yval): 
    """ evaluation dedicated to single x_axis value 
    """
        if yval in log: 
            # in a proper grid search I wouldn't check twice
            # but this is just to show that log  is used and 
            # ammended inside fun()
        else: 
            log[yval] = 0

        return very_time_consuming_fun(xval, yval, log)
因此,脚本使用此设置运行网格搜索:

def func_eval(fun): 
    for yval in y_axis: 
        fun(yval)

# the loop I want to parallelize    
for xval in x_axis: 
    fun = get_function(xval, args) # args are computed based on xval
    func_eval(fun)                 # can I do result = func_eval(fun) ? 
我想问的是:

  • 假设
    log
    对每个
    x\u轴的
    值使用不同的实例是否正确
    
  • 对于
  • 循环,并行化最后一个
    的最佳方法是什么?(如果
    日志
    实例需要同步,请详细说明)。同样,我只希望对每个
    x_轴的
    值进行评估,以确定其线程/核心/您指定的值(欢迎使用最佳实践)
  • 是否有办法获得每个
    功能评估的结果,即如果我有以下条件,它是否仍然可以并行化:

    x_axis = ['linear', 'quadratic', 'cubic']
    y_axis = range(1, 100) # simplification
    
    out = func_eval(fun)
    

    • 我讨厌沉默

      这就是我现在正在做的(因此,如果不正确,至少我会被否决)

      这应该足够好,但我得到以下错误:

      PicklingError:无法pickle:属性查找内置。函数失败