threading

# -*- 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()。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章