我正在使用scipy.optimize
模块来使参数适合测量。这些函数需要我在主命名空间中定义的许多变量。即使所有功能都在同一个文件中,我仍然得到一个NameError
。
仅当我使用workers
的{{1}}参数使用并行处理功能时,才会出现错误。
当我不使用differential_evolution
功能时,错误消失了。如果我将变量明确传递给函数,它也会消失。
workers
import scipy.optimize
def optimize_parameters():
solution = scipy.optimize.differential_evolution(error, bounds=[[0, 1], [0, 1], [0, 1], [0, 1]], workers=4)
print(solution.x)
def error(x):
parameter_dict.update(zip(parameter_list, x))
return complex_error_calculation()
def complex_error_calculation():
return parameter_dict['a'] * 10 + parameter_dict['b'] * 5 - parameter_dict['c'] * 2 + parameter_dict['d']
if __name__ == "__main__":
parameter_list = ['a', 'b', 'c', 'd']
parameter_dict = {'a': 0, 'b': 1, 'c': 2, 'd': 3}
optimize_parameters()
NameError: name 'parameter_dict' is not defined
我希望代码可以并行运行,并且有一种解决方法可以使代码并行运行。就像一个复杂的解决方案。我想了解为什么会出现NameError我使用worker功能和pythonic方法来处理此问题。