我对 Python 中的全局变量感到困惑。有时一个全局变量在我的程序的所有实例之间共享,有时一个实例会创建它自己的全局变量版本。
我需要的是有一个处理程序来处理放入全局字典中的项目。只有一个函数可以将项目添加到全局字典中,但该函数会同时运行多次。
在视图中:
global_dict = {}
def handler():
global global_dict
print "Starting handler"
while True:
local_dict = dict(global_dict)
for key, v in local_dict.iteritems():
handle_the_item(v)
del global_dict[key]
print "Handled: ", key
time.sleep(0.05)
def some_function(function_number)
global global_dict
print "Starting function", function_number
for x in y:
key = random.randint(0, 5000000)
print function_number, "giving to handler:", key
global_dict[key] = some_item
我开始:
(我使用 Django,所以每个函数都是通过调用带有一些参数的 url 来启动的)
handler()
some_function(1)
some_function(2)
some_function(3)
它打印:
Starting handler
Starting function 1
Starting function 2
Starting function 3
1 giving to handler 111111
2 giving to handler 222222
3 giving to handler 333333
1 giving to handler 444444
2 giving to handler 555555
3 giving to handler 666666
Handled: 111111
Handled: 222222
Handled: 444444
Handled: 555555
处理程序从不处理函数 3 添加的项目。据我所知,这是因为处理程序和函数 3 都有自己的(假定的)全局变量 global_dict 的实例。我还通过在 some_function() 中打印出 global_dict 的长度来验证这一点。随着更多项目的添加,函数 3 中的 global_dict 不断增长。
请注意,哪些函数共享 global_dict 实例以及哪些函数拥有自己的实例是随机的。如果我停止一切并再次运行它,可能是所有实例共享 global_dict。或者没有。或 3 和 1 以及处理程序。