python 线程池的使用
线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。
# 线程池的使用示例, from concurrent.futures import ThreadPoolExecutor,TimeoutError import threading import time # 定义一个准备作为线程任务的函数 def action(max): my_sum = 0 for i in range(max): # print(threading.current_thread().name + ' ' + str(i)) my_sum += i time.sleep(0.1) return str(max)+':'+str(my_sum) # 创建一个包含4条线程的线程池,使用map,没有设置线程的超时 def pool_run(): with ThreadPoolExecutor(max_workers=4) as pool: # 使用线程执行map计算 # 后面元组有3个元素,因此程序启动3条线程来执行action函数 results = pool.map(action, (50, 100, 150)) print('--------------') for r in results: print(r) # 设置线程超时时间的示例 def pool_set_timeout(): futures = [] with ThreadPoolExecutor(max_workers=4) as pool: for i in (10,20,50): future = pool.submit(action,i) futures.append([i,future]) for future in futures: try: r=future[1].result(timeout=3) print(r) except TimeoutError: print(future[0],': is timeout') if __name__ == '__main__': pool_set_timeout()