在同一脚本中从另一个函数调用函数时,如何避免NameError?

时间:2019-04-23 00:29:45

标签: python-3.x parallel-processing scope scipy namespaces

我正在使用scipy.optimize模块来使参数适合测量。这些函数需要我在主命名空间中定义的许多变量。即使所有功能都在同一个文件中,我仍然得到一个NameError

仅当我使用workers的{​​{1}}参数使用并行处理功能时,才会出现错误。

当我不使用differential_evolution功能时,错误消失了。如果我将变量明确传递给函数,它也会消失。

以下代码生成一个NameError:

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方法来处理此问题。

0 个答案:

没有答案