Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2009 12:42:45

alphaville
От:
Зарегистрирован: 2009-07-17
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

потоки. работает. почему так - не понимаю.

Здравствуйте!

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

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 не будет работать.

Спасибо!



Офлайн

#2 Сен. 13, 2009 12:55:59

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

потоки. работает. почему так - не понимаю.

2. Вместо глобальной переменной можно использовать переменную, принадлежащую всему классу.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version