python多线程和多进程——使用 concurrent.futures.ProcessPoolExecutor 和 ThreadPoolExecutor

ops/2025/3/15 5:23:02/

在使用 concurrent.futures.ProcessPoolExecutor 和 ThreadPoolExecutor 时,如果你不指定 max_workers 参数,Python 会根据系统资源和任务类型自动选择一个合理的默认值。以下是关于这两个执行器的默认行为的详细说明:

ProcessPoolExecutor 默认值

对于 ProcessPoolExecutor,如果没有指定 max_workers 参数,默认值是你的机器上的 CPU 核心数。

python">from concurrent.futures import ThreadPoolExecutor
import os# 默认情况下,ThreadPoolExecutor 使用的线程数为 min(32, CPU核心数 + 4)
with ThreadPoolExecutor() as executor:print(f"Default max_workers: {executor._max_workers}")  # 注意:_max_workers 是内部属性,仅供调试查看cpu_cores = os.cpu_count()
default_max_workers = min(32, cpu_cores + 4)
print(f"Calculated default max_workers: {default_max_workers}")

因此,如果你有一个4核处理器,ProcessPoolExecutor 将默认创建4个工作进程。

ThreadPoolExecutor 默认值

对于 ThreadPoolExecutor,如果没有指定 max_workers 参数,默认值取决于 Python 版本:
Python 3.5 及更高版本(包括 Python 3.8+):
如果没有指定 max_workers,默认值为 min(32, os.cpu_count() + 4)。也就是说,默认的最大工作线程数是32和CPU核心数加4中的较小者。

python">from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import osdef print_default_values():# 获取CPU核心数cpu_cores = os.cpu_count()print(f"Number of CPU cores: {cpu_cores}")# ProcessPoolExecutor 默认值with ProcessPoolExecutor() as process_executor:print(f"ProcessPoolExecutor default max_workers: {process_executor._max_workers}")# ThreadPoolExecutor 默认值with ThreadPoolExecutor() as thread_executor:print(f"ThreadPoolExecutor default max_workers: {thread_executor._max_workers}")if __name__ == "__main__":print_default_values()

例如,如果你有4核处理器,默认的最大线程数将是 min(32, 4 + 4) = 8。
总结
ProcessPoolExecutor:默认最大工作进程数等于CPU核心数。
ThreadPoolExecutor:默认最大工作线程数为 min(32, CPU核心数 + 4)。

示例代码

以下是一个综合示例,展示了如何获取和打印这些默认值:

python">from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import osdef print_default_values():# 获取CPU核心数cpu_cores = os.cpu_count()print(f"Number of CPU cores: {cpu_cores}")# ProcessPoolExecutor 默认值with ProcessPoolExecutor() as process_executor:print(f"ProcessPoolExecutor default max_workers: {process_executor._max_workers}")# ThreadPoolExecutor 默认值with ThreadPoolExecutor() as thread_executor:print(f"ThreadPoolExecutor default max_workers: {thread_executor._max_workers}")if __name__ == "__main__":print_default_values()

http://www.ppmy.cn/ops/165862.html

相关文章

深度学习篇---Opencv中的Haar级联分类器

文章目录 1.Haar 级联分类器配置文件的结构2.OpenCV 自带的 Haar 级联分类器配置文件2.1人脸检测2.1.1haarcascade_frontalface_default.xml2.1.2haarcascade_frontalface_alt.xml2.1.3haarcascade_frontalface_alt2.xml2.1.4haarcascade_frontalface_alt_tree.xml 2.2眼睛检测…

【Deepseek基础篇】--v3基本架构

目录 MOE参数 1.基本架构 1.1. Multi-Head Latent Attention多头潜在注意力 1.2.无辅助损失负载均衡的 DeepSeekMoE 2.多标记预测 2.1. MTP 模块 论文地址:https://arxiv.org/pdf/2412.19437 DeepSeek-V3 是一款采用 Mixture-of-Experts(MoE&…

【数据结构】-哈夫曼树以及其应用

哈夫曼树(Huffman Tree) 1. 哈夫曼树的定义 哈夫曼树(Huffman Tree)是一种 带权路径长度最短的二叉树,常用于数据压缩和最优前缀编码。其目标是使得 带权路径长度(WPL)最小。 在信息论和计算…

Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装

Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装 目录 Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装 一、简单介绍 1. shared_preferences 2. sqflite 3. file 二、shared_preferences 开发注…

matlab慕课学习3.2+3.3

于20250310 3.2用if语句实现选择结构 3.2.1什么是选择结构 用if 语句和switch语句可实现选择结构 3.2.2单分支if语句 if 条件语句组 %可以是一条也可是多条end 当条件为标量,非0表成立,0表示不成立。 当条件为矩阵时,矩阵非空&#xff…

从Spring容器中获取bean

从Spring容器中获取bean Spring自带了多种类型的应用上下文。下面罗列的几个最常用的: AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文。AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类…

驾培市场与低空经济无人机融合技术详解

随着科技的飞速发展和社会的不断进步,驾培市场正面临着前所未有的变革。传统汽车驾驶培训已不再是唯一的选择,无人机驾驶等新兴领域正逐渐成为驾培市场的重要组成部分。本报告旨在探讨驾培市场与低空经济的融合发展,特别是应用型人才培养与驾…

深度学习——Diffusion Model学习,扩散模型

一、什么是扩散模型 针对一张图片有一个前向过程,也就是逐渐批次加噪,生成一张Noise图片,那么问题就是是不是有这样的一个反向的过程能够针对一个有噪点的数据,还原到清晰的图片 具体来说:通过加入0-1正态分布的高斯噪…