python多线程中join的用法

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 fast
in slow
done in fast
Thread-1
done in slow
Thread-2
0:00:15.001000
Done 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 fast
in slow
done in slow
done in fast
Thread-1
Thread-2
0:00:15.001000
Done on main


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

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




http://30daydo.com/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值