ホームページ  >  記事  >  バックエンド開発  >  Python THREADING モジュールの JOIN() メソッド

Python THREADING モジュールの JOIN() メソッド

不言
不言オリジナル
2018-04-17 15:29:322048ブラウズ

この記事では、主に Python THREADING モジュールの JOIN() メソッドの理解を詳しく紹介します。他の記事とは異なり、JOIN() メソッドの理解を簡潔にまとめています。必要な方はそれを参照してください

oschina の 2 つのコードを読むことで多くの恩恵を受けました。このうち、join() メソッドがわかりません。Python 公式 Web サイトのドキュメントの紹介を参照してください:
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() メソッドを呼び出すメインプロセスです。一つ。 4 つのスレッドすべての実行が終了すると、メインスレッドは次のコードを実行します。これは、メインスレッドがここで終了することを意味します。
インターネット上で見つかった別の対応するメソッド:
3. デーモン

setDaemon()

このメソッドは、基本的に join の逆です。プログラムの実行中にメインスレッドを実行する場合、メインスレッドがサブスレッドを作成すると、メインスレッドとサブスレッドが2つに分割されて実行され、メインスレッドが完了して終了しようとすると、サブスレッドが完了したかどうかを確認します。子スレッドが完了していない場合、メインスレッドは子スレッドが完了するのを待ってから終了します。ただし、サブスレッドが完了しているかどうかに関係なく、メインスレッドが完了している限り、メインスレッドと一緒に終了する必要がある場合もあります。この場合、setDaemon メソッドを使用できます

以上がPython THREADING モジュールの JOIN() メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。