# -*- coding: utf-8 -*-
from
time
import
sleep, ctime
import
threading
loops = [
4
,
2
]
def
loop(nloop, nsec):
print
'start loop'
, nloop,
'at:'
, ctime()
sleep(nsec)
print
'loop'
, nloop,
'done at:'
, ctime()
def
main():
print
'starting at:'
, ctime()
threads = []
nloops =
range
(
len
(loops))
for
i
in
nloops:
t = threading.Thread(
target
=loop,
args
=(i,loops[i]))
threads.append(t)
for
i
in
nloops:
threads[i].start()
for
i
in
nloops:
threads[i].join()
#程序挂起,直到线程结束
print
'all done at:'
,ctime()
if
__name__ ==
'__main__'
:
main()
所有的线程都创建了之后,再一起调用 start()函数启动,而不是创建一个启动一个。而且,
不用再管理一堆锁(分配锁,获得锁,释放锁,检查锁的状态等), 只要简单地对每个线程调用 join()
函数就可以了。
join()会等到线程结束,或者在给了 timeout 参数的时候,等到超时为止。使用 join()看上去
会比使用一个等待锁释放的无限循环清楚一些(这种锁也被称为"spinlock")
join()的另一个比较重要的方面是它可以完全不用调用。一旦线程启动后,就会一直运行,直
到线程的函数结束,退出为止。如果你的主线程除了等线程结束外,还有其它的事情要做(如处理
或等待其它的客户请求),那就不用调用 join(), 只有在你要等待线程结束的时候才要调用 join()。