Python を学習したことのある人なら、Python がマルチスレッドをサポートし、ネイティブ スレッドであることを知っているはずです。この記事では主に、スレッドとスレッドの 2 つのモジュールを通じてマルチスレッドを実装します。
Python のスレッド モジュールは、比較的低レベルのモジュールです。Python のスレッド モジュールには、より便利に使用できるスレッド用のパッケージがあります。
ここで言及する必要があるのは、Python のスレッドのサポートが十分ではなく、複数の CPU を利用できないことです。ただし、この点の改善は Python の次のバージョンで検討されています。
スレッド モジュールは主にいくつかのスレッド操作をオブジェクト化し、Thread と呼ばれるクラスを作成します。
一般に、スレッドを使用するには 2 つのモードがあります。1 つは、スレッドによって実行される関数を作成し、その関数を Thread オブジェクトに渡して実行する方法です。もう 1 つは、Thread から直接継承して作成する方法です。新しいクラスを作成するには、スレッドによって実行されるコードをこの新しいクラスに置きます。
これら 2 つのアプローチを見てみましょう。
1. Python スレッドはマルチスレッドを実装します
#-*- 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)
2. マルチスレッドを実装するための Python スレッド
#-*- 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()
この記事で説明されている Python マルチスレッドの例は、あらゆる人の Python プログラミング設計にとって一定の参考価値があると信じています。