Pythonでのスレッドライブラリの基本的な使用法

前書き

スレッドモジュールには、一般的なスレッド関数、スレッドオブジェクト、ロックオブジェクト、再帰ロックオブジェクト、イベントオブジェクト、条件変数オブジェクト、セマフォオブジェクト、タイマーオブジェクト、フェンスオブジェクトなど、スレッド操作に関する豊富な関数が含まれています。
PythonにはGIL(グローバルインタープリターロック)が存在するため、真の並列スレッドは実現できませんが、並行スレッドは実現することしかできません。
この記事では、スレッドライブラリの基本的なメソッドを紹介します。その他の複雑なメソッドは、使用時に更新されます。

スレッドを作成する

最初のメソッド:threading.Threadを呼び出す

import threading
# target 相当于C中的 void*(*p)(),args是参数列表
thread = threading.Thread(target=target, args=[i])

2番目のメソッド:threading.Threadを継承するクラスを作成します

import time
import threading


class OwnThread(threading.Thread):
    def __init__(self, para, sleep):
        # 先调用父类的threading.Thread.__init__方法
        super().__init__()
        self.para = para
        self.sleep = sleep

	# 覆盖了父类的run方法
    def run(self):
        """线程内容"""
        time.sleep(self.sleep)
        print(self.para)


def main():
    # 创建线程
    thread_hello = TestThread('hello', 1)
    # 启动线程
    thread_hello.start()
    print('Main thread has ended!')


if __name__ == '__main__':
    main()

スレッドを開始

スレッドを開始した後、スレッドはターゲットで指定された関数/実行対象の関数の実行を開始します

thread = threading.Thread(target=target, args=[i])
thread.start()

結合メソッド

従来の結合の概念と同様に、メインスレッドは、結合を実行しているスレッドがデモーンであるかどうかに関係なく、結合スレッドの実行が終了するのをブロックして待機します。

thread = threading.Thread(target=target, args=[i])
thread.join()

ロック

ロックを使用してグローバルリソースを保護します(延期したシステムソフトウェアを思い出さずにはいられません)

import threading
import time

lock=threading.Lock()
fuck = 0


def target(second):
    global fuck
    lock.acquire()
    print(fuck)
    tmp = fuck+1
    time.sleep(0.001)
    fuck = tmp
    lock.release()


for i in range(1,1000):
    thread = threading.Thread(target=target, args=[i])
    thread.start()

おすすめ

転載: blog.csdn.net/weixin_44602409/article/details/107299196