目前我有一个解析数千个数据文件的进程,目前我正在采取以下策略来限制基于总数量低于可用CPU数量而启动的并行进程数。
但这是最合适的方式吗?
from concurrent.futures import ProcessPoolExecutor
from multiprocessing import cpu_count
def pool_executor(function_name, data):
if len(data) >= 8:
workers = cpu_count()
else:
workers = len(data)
with ProcessPoolExecutor(max_workers=workers) as executor:
executor.map(function_name, data)
答案 0 :(得分:0)
您可以传递cpu_count()
max_workers
值。如果len(data)
小于它,则不会创造超出其需要的工人。
def pool_executor(function_name, data):
with ProcessPoolExecutor(max_workers=cpu_count()) as executor:
executor.map(function_name, data)
但是,您可能希望尝试查找cpu_count()
是否实际上是最佳值。如果您的进程花费大量时间来读/写文件,那么从cpu_count()
稍微开始实际上可以为您提供额外的提升,但这只是您可以通过测量确定的。