Могут ли потоки python обращаться к переменным в пространстве имен?

У меня есть скрипт, который создает кучу потоков, запускает программу для использования потоков для запуска задач из очереди и возвращает что-то из каждого потока. Я хочу подсчитать, сколько из них возвращено успешно, поэтому я устанавливаю переменную «successful=0» и увеличиваю ее каждый раз, когда очередь сообщает об успешном завершении задачи.

Тем не менее, я получаю "UnboundLocalError :локальная переменная "успешно" ссылается перед назначением"

Что происходит?

Вот пример кода:

successful = 0

q = Queue(200)
for i in range(100):
    t=Thread(target=foo)
    t.daemon=True
    t.start()
def foo():
    while True:
        task=q.get()
        #do some work
        print task
        successful+=1 # triggers an error
        q.task_done()
for i in range(100):
    q.put("Foo")
q.join()
print successful
17
задан Oliver 2 August 2012 в 22:07
поделиться