如何让主线程在启动后等待内部线程?

时间:2017-09-15 20:27:04

标签: python multithreading python-3.x

如何让主线程在python中启动后等待内部线程?

我为此使用join,但它无法正常工作,我认为这是因为内部线程调用了time.sleep()。 有什么想法吗?

以下是代码的块框:

def execution(start,end):
    for i in range (start,end):
        main ()
    return

def waitForThread(delay,my_threads):
    time.sleep (delay)
    for t in my_threads:
        t.join ()
        if t in my_threads:
            my_threads.remove (t)
    return

def task(user,sleep): # it has multiple time.sleep()
    #do some actions
    time.sleep()
    #do some actions
    time.sleep()
    return  

def main():
    threads=[]
    for user in accounts:
        t = Thread (target=task,args=(sleep-time,user))
        t.start ()
        threads.append (t)
    waitForThread (130,threads)

    ## I want the code stop here and when the execution of threads finished continue 

    ## doing other staff here 

    return

if __name__ == '__main__':
    execution(1,30)

1 个答案:

答案 0 :(得分:2)

功能

        if t in my_threads:
            my_threads.remove (t)
看起来很可疑。特别是行

my_threads

这些行将从for循环中的del中删除元素,因此您不会等待所有线程完成。

如果删除这些行,代码将等待线程正确连接。然后,如果您认为需要删除主题,则可以在waitForThread返回时执行此操作(例如,使用for)。

实习课程是不修改您在git-bash.exe循环中循环的元素列表 - 至少不是通过添加或删除元素。这通常会产生奇怪的效果。