2013-05-01 61 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