【发布时间】:2017-06-26 13:00:13
【问题描述】:
好的,完全公开,我不是在进行网格搜索,但 最小示例 我可以找到我要问的内容(有一点盐)简化为网格搜索(如果你想知道为什么我不提到 numpy 和朋友)。
我在 Python 中进行网格搜索,其中一个轴是离散的,另一个轴是连续的,但为简单起见,假设我有以下内容:
x_axis = ['linear', 'quadratic', 'cubic']
y_axis = range(1, 100) # simplification
对我的函数的评估取决于轴和中间日志结构,因此为了没有全局数据,我将我的函数定义为 闭包:
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_axis值的不同实例 一起工作? -
并行化最后一个
for循环的最佳方法是什么?(如果log实例需要同步,请详细说明)。同样,我只想评估每个x_axis值到它的线程/核心/你的名字(欢迎最佳实践) -
有没有办法为每个
func_eval获取结果,即如果我有以下情况,它是否仍然可以并行化:out = func_eval(fun)
【问题讨论】:
标签: python multithreading python-2.7 parallel-processing