首頁  >  文章  >  後端開發  >  Python THREADING模組中的JOIN()方法

Python THREADING模組中的JOIN()方法

不言
不言原創
2018-04-17 15:29:321981瀏覽

這篇文章主要介紹了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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn