互斥锁 (Mutex)

直接定义然后通过

import threading

# 创建一个互斥锁
lock = threading.Lock()

# 多线程执行的部分
def worker(...):
		...
    # 这样就可以保证同一时间只会有一个线程在访问这个部分
		with lock:
				...

线程池 (ThreadPoolExecutor)

ThreadPoolExecutor 是 Python 的 concurrent.futures 库中的一个类,用于管理线程池,使并发编程更加方便。它提供了一个高层次的接口,允许你异步执行函数或方法,并可以限制同时执行的线程数量,以提高 CPU 利用率和资源管理。

from concurrent.futures import ThreadPoolExecutor

def worker(param1, param2, ...):
    pass

results = []

# 创建一个 ThreadPoolExecutor,并限制并发线程的数量
max_threads = 5  # 你可以根据需要调整线程数量
with ThreadPoolExecutor(max_threads) as executor:
    # 将任务提交给线程池
    futures = []
    for i in range(N):
        input_param = ...
        print("////////// START WORKING ON %d of %d" % (i+1, N)
        future = executor.submit(worker, param1, param2, ...)
        futures.append(future)

    # 等待所有任务完成
    for i, future in enumerate(futures):
        print("////////// FINISHED WORKING ON %d of %d" % (i+1, N)
        result = future.result()
        results.append(result)

future.result() 将阻塞当前线程,直到任务完成并返回结果。