Найти - Пользователи
Полная версия: потоки. работает. почему так - не понимаю.
Начало » Python для новичков » потоки. работает. почему так - не понимаю.
1
alphaville
Здравствуйте!

есть класс с кодом, который должен выполняться параллельно:

class Parallel(threading.Thread):
def __init__(self,titer,headers,execkey_string):
self.titer = titer
self.execkey_string = execkey_string
self.headers = headers
threading.Thread.__init__(self)
def run(self):
global FinalCollector
#здесь идёт код, который заполняет глобальный словарь FinalCollector. заполняет с блокировками, чтобы потоки не конфликтовали.
Далее идёт код, который запускает параллельную обработку:
FinalCollector = defaultdict(dict)

for titer in Collector:
part = Parallel(titer,headers,execkey_string)
part.start()

while threading.activeCount() <> 1:
pass
Всё работает корректно, в FinalCollector получаю то, что ожидал.
Но есть несколько вопросов:

1. В цикле for titer in Collector я каждый раз создаю новый экземпляр класса с одинаковым именем part. Почему же всё выполняется корректно и один поток (экземпляр класса) не забивается другим?
2. Как лучше организовать сбор данных из всех потоков без глобальных переменных? Можно было бы пихать их в self.FinalCollector - но ведь тогда информация будет разбросана по экземплярам и вместе не соберётся.
3. Как лучше отслеживать завершение всех работающих потоков? В будущем я планирую запускать параллельный потоки, которые из себя будут порождать другие параллельные потоки. В этом случае while threading.activeCount() <> 1 не будет работать.

Спасибо!
pasaranax
2. Вместо глобальной переменной можно использовать переменную, принадлежащую всему классу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB