当先锋百科网

首页 1 2 3 4 5 6 7

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的值。