這篇文章主要介紹了Python THREADING模組中的JOIN()方法深入理解,本文用簡潔易懂的語言總結了對JOIN()方法的理解,不同於其它文章,有需要的朋友可以參考下
看了oschina上的兩個程式碼,受益匪淺。其中對join()方法不理解,看python官網文件的介紹:
join([timeout]):等待直到進程結束。這將阻塞正在呼叫的線程,直到被呼叫join()方法的線程結束。 (好難翻譯,應該是這個意思)
哈哈,這個很容易理解。
join方法,如果一個線程或一個函數在執行過程中要呼叫另外一個線程,並且待到其完成以後才能接著執行,那麼在呼叫這個線程時可以使用被呼叫線程的join方法。
複製程式碼 程式碼如下:
#-*- encoding: gb2312 -*- import string, threading, time def thread_main(a): global count, mutex # 获得线程名 threadname = threading.currentThread().getName() for x in xrange(0, int(a)): # 取得锁 mutex.acquire() count = count + 1 # 释放锁 mutex.release() print threadname, x, count time.sleep(1) def main(num): global count, mutex threads = [] count = 1 # 创建一个锁 mutex = threading.Lock() # 先创建线程对象 for x in xrange(0, num): threads.append(threading.Thread(target=thread_main, args=(10,))) # 启动所有线程 for t in threads: t.start() # 主线程中等待所有子线程退出 for t in threads: t.join() if __name__ == '__main__': num = 4 # 创建4个线程 main(4) ################################################################### #-*- encoding: gb2312 -*- import threading import time class Test(threading.Thread): def __init__(self, num): threading.Thread.__init__(self) self._run_num = num def run(self): global count, mutex threadname = threading.currentThread().getName() for x in xrange(0, int(self._run_num)): mutex.acquire() count = count + 1 mutex.release() print threadname, x, count time.sleep(1) if __name__ == '__main__': global count, mutex threads = [] num = 4 count = 1 # 创建锁 mutex = threading.Lock() # 创建线程对象 for x in xrange(0, num): threads.append(Test(10)) # 启动线程 for t in threads: t.start() # 等待子线程结束 for t in threads: t.join()
在程式中,最後join()方法的呼叫就明白了,是主行程挨個呼叫子執行緒的join()方法。當四個執行緒都執行完畢後,主執行緒才會執行下面的程式碼,在這裡也就是退出了。
相對應的在網路上一起找到的另一個方法:
3.守護程式
setDaemon()
這個方法基本上和join是相反的。當我們在程式運行中,執行一個主線程,如果主線程又創建一個子線程,主線程和子線程就分兵兩路,分別運行,那麼當主線程完成想退出時,會檢驗子線程是否完成。如果子執行緒未完成,則主執行緒會等待子執行緒完成後再退出。但有時候我們需要的是,只要主執行緒完成了,不管子執行緒是否完成,都要和主執行緒一起退出,這時就可以用setDaemon方法啦
以上是Python THREADING模組中的JOIN()方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!