执行任务时监听线程

时间:2013-05-01 22:34:15

标签: python multithreading process

我试图寻找答案,但找不到任何相关内容。因此,决定要求。

我有一个脚本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已结束”部分吗?

2 个答案:

答案 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()以在准备好时检索返回值。并确保让目标将返回值放入队列中,否则您将等待很长时间。

答案 1 :(得分:0)

如果你正在使用子进程模块,你可以这样做。

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

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

有关子流程和民意调查的更多信息here