Python线程池是一种常见的并发编程方式,其主要作用是将任务分发到多个线程中并发执行,提高程序的执行效率。在线程池中,如果不进行同步操作的话,可能会导致多个线程同时访问共享资源,引发数据错误,因此线程池同步是需要进行的。
import threading # 导入线程模块 from concurrent.futures import ThreadPoolExecutor # 导入线程池模块 total = 0 # 共享资源 def add_num(num): global total # 声明共享变量 lock = threading.Lock() # 创建锁对象 with lock: # 上锁 for i in range(num): total += 1 # 对共享资源进行操作 print("线程%s执行完毕" % threading.current_thread().getName()) # 打印线程名称 if __name__ == '__main__': nums = [100000, 300000, 500000] # 待执行的三个任务 pool = ThreadPoolExecutor(max_workers=3) # 创建线程池对象 for i in range(3): task = pool.submit(add_num, nums[i]) # 将任务分发到线程池中 pool.shutdown(wait=True) # 关闭线程池并等待执行完毕 print("所有任务执行完毕,total值为:", total) # 打印共享资源的值
上述代码中,首先定义了一个共享资源total,并在三个任务add_num中对其进行操作。在add_num函数中,我们创建了一个锁对象lock并调用with lock代码块来上锁,从而保证了同一时间只有一个线程可以访问共享资源。
在主函数中,我们首先定义了三个待执行的任务nums,并创建了一个线程池对象pool,将任务分发到线程池中。接着使用pool.shutdown()方法关闭线程池并等待执行完毕,最后打印共享资源total的值。