从模块访问函数中的局部变量

时间:2010-11-02 10:30:01

标签: python

我的主程序中有一个函数试图从导入的模块中检索信息,这是我写的一个不同的脚本。该模块通过使其成为全局程序来吐出一个我从主程序访问的变量。

但是,由于我正在线程化请求信息的函数,因此通过将来自单独请求的信息添加到一个var中来对全局变量进行污染。我正在寻找的是一种访问模块中函数的局部变量的方法。

主程序:

import module

def threaded_function():
    module.function(var1, var2)
    print module.output

模块:

def function(var1, var2):
    global output  
    output = []
    DoThingsWithVars(var1, var2)
    output.append(result)

由于线程导致多次访问它,我想我不会使用全局变量并获取每个请求的局部变量。知道我怎么能得到那些吗?

1 个答案:

答案 0 :(得分:2)

嗯,当func locals有意义的唯一情况是闭包和生成器。您可以通过__closure__属性访问它们,但是您必须为每个单独的线程生成闭包,并且将线程局部列表传递给函数会更容易。

有时候实际使用的其他方法是使用线程局部全局变量。有关详细信息,请阅读http://docs.python.org/library/threading.html#threading.local。在你的情况下它会像这样工作:

locs = threading.local()
def function(var1, var2):
    global locs  
    if not locs.output:
        locs.output = []
    DoThingsWithVars(var1, var2)
    locs.output.append(result)