вопрос по питону (новичок :) и поток)

Тема в разделе "Другие языки", создана пользователем marvinz, 18 апр 2011.

Модераторы: Цукер
  1. marvinz

    marvinz

    Регистр.:
    7 апр 2009
    Сообщения:
    163
    Симпатии:
    75
    Добрый день, пытаюсь решить одну свою задачу на питоне. Алгоритм следующий:

    1) программа получает некие данные
    2) начинается цикл
    3) на определенном этапе она запускает поток и продолжает выполняться
    4) на некоторой стадии она должна дождаться завершения этого потока
    5) на начало цикла
    6) выводит результат

    какой правильный скелет подобного приложения? может кто написать?
     
  2. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    60
    каркас

    Набросал каркас:
    Код:
    #!/usr/bin/env python
    # -*- encoding:utf-8 -*-
    import threading
    import time
    class T(threading.Thread):
        def __init__(self, n):
            threading.Thread.__init__(self, name="thread" + str(n))
            self.n = n
        def run(self):
            time.sleep(5)
            print "Поток отработал свое", self.n
    for i in xrange(3):
        print "Начинаем, цикл:", i
        time.sleep(1)
        print "Запускам поток"
        t = T(i)
        t.start()
        print "Продолжаем работать"
        time.sleep(2)
        print "Ждем поток"
        if t.isAlive(): 
            t.join()
        print "Дождались поток\n", "-"*20
    Вывод в консоль:
    Код:
    Начинаем, цикл: 0
    Запускам поток
    Продолжаем работать
    Ждем поток
    Поток отработал свое 0
    Дождались поток
    --------------------
    Начинаем, цикл: 1
    Запускам поток
    Продолжаем работать
    Ждем поток
    Поток отработал свое 1
    Дождались поток
    --------------------
    Начинаем, цикл: 2
    Запускам поток
    Продолжаем работать
    Ждем поток
    Поток отработал свое 2
    Дождались поток
    --------------------
    
     
    marvinz нравится это.
  3. marvinz

    marvinz

    Регистр.:
    7 апр 2009
    Сообщения:
    163
    Симпатии:
    75
    zardoz, а в чем смысл строчки:

    PHP:
    t.join()
    ?
     
  4. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    60
    Поток, который вызвал метод join(), приостанавливается и дожидается выполнения потока, которому этот метод принадлежит (поток t).

    А isAlive() возвращает True, если поток еще работает.