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