Pythonのマルチスレッドでグローバル変数を共有する方法
Pythonでは、グローバル変数をマルチスレッドで共有する方法は主に以下の通りです。
- グローバル変数の利用:複数のスレッドからグローバル変数を直接利用します。ただし、複数のスレッドが同時にグローバル変数を書き換える可能性があり、データ競合や不確定な結果を招く可能性がある点に注意が必要です。
import threading
def thread_func():
global shared_variable
# 使用 shared_variable
# 创建多个线程
threads = []
for _ in range(10):
t = threading.Thread(target=thread_func)
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
- スレッドセーフラッパーを使用:スレッドセーフラッパーを使用して、複数のスレッドからのアクセスを制御しデータの整合性を確保します。
import threading
shared_variable = 0
lock = threading.Lock()
def thread_func():
global shared_variable
lock.acquire()
try:
# 修改 shared_variable
finally:
lock.release()
# 创建多个线程
threads = []
for _ in range(10):
t = threading.Thread(target=thread_func)
threads.append(t)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
- スレッドローカル変数の使用:各スレッドが独自の変数のコピーを持ち、共有しない。
import threading
thread_local = threading.local()
def thread_func():
# 使用 thread_local.variable
# 设置每个线程的变量副本
for _ in range(10):
thread_local.variable = 0
t = threading.Thread(target=thread_func)
t.start()
# 等待所有线程结束
for t in threads:
t.join()
具体的なニーズに基づいて、グローバル変数のマルチスレッド共有を実現する適切な方法を選択する必要があります。