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