Python中的简化并行网格搜索
好的,完全公开,我不是在做网格搜索,但是我能找到的关于我将要问的问题的最小示例可以(有一点保留)简化为网格搜索(以防你想知道为什么我没有提到numpy和friends)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) 我的函数的评估
我在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:属性查找内置。函数失败