Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2012 14:18:54

nauman
От:
Зарегистрирован: 2009-10-28
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Очередь выполния многопоточных операций

В общем, я в ООП не силен и к Питону v2.7 обращаюсь по мере необходимости, нужна Ваша помощь.
Обобщенно говоря, есть несколько многопоточных операций:

import threading

class MyThread(threading.Thread):
def run ( self ):
func_1()

class MyThread2(threading.Thread):
def run ( self ):
func_2()

class MyThread3(threading.Thread):
def run ( self ):
func_3()

class MyThread4(threading.Thread):
def run ( self ):
func_4()

class MyThread5(threading.Thread):
def run ( self ):
func_5()

MyThread().start()
MyThread2().start()
MyThread3().start()
MyThread4().start()
MyThread5().start()

Многопоточность работает, но не так как нужно. Нужно чтобы MyThread5().start() выполнялся только по завершения всех остальных потоков. Запускал задержку time.sleep(5), это в некотором случае помогает, но все равно, если задачи остальных потоков будут болшими, он их опередит.
Как можно реализовать на моем примере, выпонение MyThread5().start() самым последним. Только прошу показать на моем примере. Спасибо.



Отредактировано nauman (Апрель 7, 2012 14:29:28)

Офлайн

#2 Апрель 7, 2012 17:05:44

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Очередь выполния многопоточных операций

nauman
Нужно чтобы MyThread5().start() выполнялся только по завершения всех остальных потоков
Для этого нужно дождаться завершения остальных потоков с помощью метода join:
...
threads = [MyThread(), MyThread2(), MyThread3(), MyThread4()]
final_thread = MyThread5()
for thread in threads:
    thread.start()
for thread in threads:
    thread.join()
  
final_thread.start()
final_thread.join()

Офлайн

#3 Апрель 7, 2012 19:58:37

nauman
От:
Зарегистрирован: 2009-10-28
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Очередь выполния многопоточных операций

reclosedev
Для этого нужно дождаться завершения остальных потоков с помощью метода join:
Спасибо, сработало.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version