python多线程中join的用法

来源:互联网 发布:信鸽客户数据搜索专家 编辑:程序博客网 时间:2024/06/05 18:56

python中多线程join是用来阻塞主线程的。 


看下面的例子:

def fast():    print "in fast"    sleep(10)    print "done in fast"def slow():    print "in slow"    sleep(15)    print "done in slow"

一个运行快,一个运行慢


def main():    start=datetime.datetime.now()    threads = []    f = [fast, slow]    l = len(f)    for i in range(l):                t=threading.Thread(target=f[i],args=())        threads.append(t)    for i in range(l):        threads[i].start()    for i in range(l):                threads[i].join()        print threads[i].getName()    end=datetime.datetime.now()    print end-start    print "Done on main"    exit()



请问上面的函数输出的是什么? 朋友们可以先想一下,如果对了,说明你掌握了join的用法了。









正确的输出是:


in fastin slowdone in fastThread-1done in slowThread-20:00:15.001000Done on main

如果没有join的那一段,那么 Done on main 将会在in slow后面就执行。


而答应线程名字那条语句,则是需要等到第一个线程的join结束后才能够输出。 



那么如果把上面fast和slow的时间改一下,改成:

def fast():    print "in fast"    sleep(15)    print "done in fast"def slow():    print "in slow"    sleep(10)    print "done in slow"


那么这次输出的有是什么呢?


in fastin slowdone in slowdone in fastThread-1Thread-20:00:15.001000Done on main


因为在多线程开始之后,2个线程都同时执行,而在第一个线程运行join的时候,现在程序在等到第一个线程结束才能执行打印线程名字。

而本身后台同时运行着2个线程,join并没有把线程2停止了。所以在线程1还在运行的时候(需要15s),而第二个线程 已经完成的输出结果,因为第二个线程运行时间只有10s。 所以也就是线程1join结束后,打印出线程1的名字, 这会线程2的名字马上就会被打印出来,并没有等待10s的时间。




http://30daydo.com/

原创粉丝点击