我的主程序中有一个函数试图从导入的模块中检索信息,这是我写的一个不同的脚本。该模块通过使其成为全局程序来吐出一个我从主程序访问的变量。
但是,由于我正在线程化请求信息的函数,因此通过将来自单独请求的信息添加到一个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)
由于线程导致多次访问它,我想我不会使用全局变量并获取每个请求的局部变量。知道我怎么能得到那些吗?
答案 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)