我遵循了Python Queue页面底部的队列示例。我想访问工作线程函数中的一些全局变量,但是,有些全局变量是可访问的,有些则不可访问。在下面的简单示例中,"行"和"错误"变量是可访问的,但随后我得到了计数的UnboundLocalError。如果我输入"全局计数",那么它可以工作。但我不明白为什么其他全局变量是可访问的。
File "myfile.py", line 184, in dpn_worker
count += 1
UnboundLocalError: local variable 'count' referenced before assignment
这是我使用的代码示例:
dpns = [1,2,3,4]
q = Queue.Queue()
rows = []
errors = []
count = 0
def dpn_worker():
while True:
item = q.get()
rows.append(1)
errors.append(1)
count += 1
q.task_done()
def main():
for d in dpns:
q.put(d)
for i in range(NUM_WORKERS):
t = threading.Thread(target=dpn_worker)
t.daemon = True
t.start()
q.join()
在这种情况下,由于 count 是一个整数: -
count += 1
相当于
count = count + 1
因此,您正在尝试修改全局变量,但实际上是在创建一个局部变量。但是在 RHS 上,您在初始化之前使用局部变量。
将您的dpn_worker修改为: -
def dpn_worker():
global count
while True:
item = q.get()
rows.append(1)
errors.append(1)
count += 1
q.task_done()