2013-05-01 89 views
1

我試圖尋找答案,但找不到任何相關的東西。因此,要問的決定。執行任務時聽線程

我有一個腳本A.在腳本A的開頭,它調用腳本B(或一個函數,或者工作)在一個單獨的線程。

A繼續做一些任務。我想繼續執行腳本A,直到腳本B沒有完成。

如何在繼續完成A任務的同時收聽B的完成?

例如,

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?你是使用單獨的線程還是獨立的進程調用它? – 2013-05-01 22:42:14

+0

它調用另一個使用子進程調用該腳本的函數。 (我願意改變,如果它可以幫助)。 – 2013-05-01 22:44:43

回答

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 q.empty()替換if not t.is_alive()。然後執行q.get()以在其準備就緒時檢索返回值。並且一定要讓目標將返回值放入隊列中,否則您會等待很長時間。

+0

非常感謝。由於我的聲望很低(我需要15),我無法讚揚你。但是,我會記得只要我獲得一些,就立刻投票。這正是我所期待的。 – 2013-05-01 22:52:10

+0

很高興爲你效勞。 – MikeHunter 2013-05-01 22:55:42

+0

非常感謝關於返回值的額外信息。我可能會在將來某個時候要求。 :) – 2013-05-01 23:05:35

0

如果你使用子流程模塊,你可以這樣做。

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

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

更多關於子和輪詢here