2013-05-01 2 views
1

Я попытался найти ответ, но не смог найти ничего подходящего. Следовательно, решение спросить.Слушайте нить при выполнении задачи

У меня есть сценарий A. В начале скрипта A он вызывает скрипт B (или функцию, либо работает) в отдельном потоке.

A продолжает выполнять некоторые задачи. Я хочу продолжить выполнение скрипта A до тех пор, пока скрипт B не завершится.

Как прослушивать завершение B при выполнении задач A?

Например,

Call Script B using subprocess, import file and run function (either way) 
while(1): 
    count=count+1 
    if script B ended: 
     break 

Может кто-нибудь показать, как проверить "сценарий B закончилась" часть?

+0

Как вы называете сценарий B? Вы называете это с помощью отдельного потока или отдельного процесса? –

+0

Он вызывает другую функцию, которая использует подпроцесс для вызова этого скрипта. (Я могу изменить это, если это может помочь). –

ответ

0

Вот очень простой способ сделать то, что вы хотите:

import time 
from threading import Thread 

def stupid_work(): 
    time.sleep(4) 

if __name__ == '__main__': 
    t = Thread(target=stupid_work) 
    t.start() 
    while 1: 
     if not t.is_alive(): 
      print 'thread is done' 
      break # or whatever 
     else: 
      print 'thread is working'  

     time.sleep(1) 

Нить будет умирать, когда это будет сделано, так что вы просто проверить периодически, чтобы увидеть, если он по-прежнему вокруг. Вы не упомянули, что хотите вернуть значение. Если вы это сделаете, вы можете передать целевой функции в очередь и заменить if not t.is_alive() на if not q.empty(). Затем выполните q.get(), чтобы получить возвращаемое значение, когда оно будет готово. И убедитесь, что цель помещает возвращаемое значение в очередь, или вы будете ждать довольно долгое время.

+0

Большое спасибо. Я не могу поддержать вас из-за низкой моей репутации (мне нужно 15). Но я буду помнить, как бы выиграть. Это как раз то, что я искал. –

+0

Рад, что это сработало для вас. – MikeHunter

+0

Большое спасибо за дополнительную информацию о возвращаемом значении. Я могу потребовать, чтобы в какой-то момент в будущем. :) –

0

Если вы используете модуль подпроцесса, вы можете сделать что-то вроде этого.

from subprocess import Popen 
proc = Popen(["sleep", "100"]) 

while True: 
    if proc.poll() is not None: 
     print("proc is done") 
     break 

Подробнее о подпроцессе и опрашивать here.

Смежные вопросы