Замените это:
global storage_i
storage_i = i
На это:
birdofprey.storage_i = i
У вас также есть опечатка в строке 75:
storage_ii = stroage_i + storage_ii
(stroage_i
былодолжен быть storage_i
)
Эта строка должна быть:
storage_ii = birdofprey.storage_i + storage_ii
РЕДАКТИРОВАТЬ : Кроме того, не обращая внимания на это, вы используете классАтрибут (storage_i) выглядит так, как будто он подвержен условиям гонки.Подумайте об использовании мьютексов для защиты доступа к этому атрибуту.Я думаю, вам также нужно дождаться окончания выполнения потоков, прежде чем вы сможете получить доступ к значениям.
Но я не уверен, действительно ли вам нужен глобальный (или атрибут класса).Я думаю, что вам действительно нужна локальная переменная потока, к которой вы можете получить доступ после завершения потока (см. Метод Thread.join
). Если я правильно читаю, то забудьте про мьютексы, о которых я писал выше.Вместо этого установите атрибут storage_i как self.storage_i
(создавая отдельный экземпляр для каждого потока.) Затем в цикле for
, где вы суммируете значения, получите доступ к значению как urlv.storage_i
.Опять же, похоже, что важно выполнить join
для каждого потока, прежде чем пытаться получить доступ к его значениям.
Это все, что я могу предложить на данный момент;возможно, завтра утром (мое время) я смогу снова зарегистрироваться.