作者 主題: 請問 threading 的 join 要怎樣用,為何說跟spinlock一樣,愈看愈迷糊 Help  (閱讀 8496 次)

0 會員 與 1 訪客 正在閱讀本文。

kidmany2001

  • 懷疑的國中生
  • **
  • 文章數: 68
    • 檢視個人資料
python core programming書上說 join這個method是

let the main thread wait for the thread completion
讓主thread等待thread的完成... 看不懂 ???

而且join()還可以加時間, 我看得很模糊 google了半天也不懂

書上範例寫到threads.join的用法
讓我很困惑,

為何等到全部thread做完自己的工作,才用一個loop來執行每個thread的join??

join不是讓某個threads[2] 插入到 threads[1] 的中間時用的嗎? 所以才叫join嗎?
各別叫用  threads[1].join   threads[2].join 這樣有何等待的意義呢?

還說join可以加入等待時間

我看完這個例子 真的是讓我昏了.

有誰懂join的用法 請教我一下

代碼: [選擇]
#!/usr/bin/env python

import threading
from time import sleep, time, ctime

loops = [ 4, 2 ]

def loop(nloop, nsec):
     print 'start loop', nloop, 'at:', ctime(time())
     sleep(nsec)
     print 'loop', nloop, 'done at:', ctime(time())

def main():
     print 'starting threads…'
     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:          # start threads
         threads[i].start()

    for i in nloops:          # wait for all       
       threads[i].join( )      # threads to finish
       print 'all DONE at:', ctime(time())

 if __name__ == '__main__':
     main()

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
thread 起來以後,跟目前的程式是並行在執行的
所以當你需要等待該 thread 執行完的結果時,就需要用 join,等他完成,再繼續往後
如果你不需要等待他的執行結果,其實是可以不需要 join,只要在最後去處理此 thead 的存滅即可。
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org