我正在尝试使用for循环执行一次多启动优化(优化是通过scipy.optimize.minimize完成的)
from scipy.optimize import minimize
def multistart optimizer(func, x):
x_mins = []
fvals = []
n = x.shape[1]
for i in range(x.shape[0]):
optRes = minimize(func, x0 = x[i], bounds = ((0,1),)*n, tol = 1.e-6)
x_mins.append(optRes.x)
fvals.append(optRes.fun)
fval = min(fvals)
x_min = x_mins[np.argmin(fvals)]
return x_min, fval
这很好,直到初始起点的大小(在这种情况下为x)增加并且执行for循环所需的时间随之增加为止。因此,我想使用多个处理器来加快for循环中的速度(由于每个循环彼此独立,因此应该得到相同的结果) 问题是我真的很不熟悉在python中使用多重处理,并且正在努力寻找正确的代码。有很多涉及“多重处理”模块的示例,但我似乎无法理解如何实现它们。
另一个问题是,所有示例似乎都使用if __name__ == '__main__':
在其代码内执行并行化。我想知道是否可以避免这种情况,并且没有它就可以运行并行循环。更确切地说,如果我有一个在文件“ loop.py”中定义的循环,并使用“ main.py”在多个处理器中运行它,那么有可能吗?
答案 0 :(得分:0)
我想知道是否可以避免这种情况,并且在没有它的情况下运行并行循环。更准确地说,如果我有一个在文件
loop.py
中定义的循环,并使用main.py
在多个处理器中运行,那么有可能吗?
是的,可以。
class myThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
print "Starting " + self.name
您可以创建Thread
的子类,然后在任何地方调用它。
如果要在内部使用模型而无需重新初始化,请将其另存为静态或全局对象。