如何根据CPU的限制处理多处理

时间:2017-10-20 10:12:40

标签: python python-3.x

目前我有一个解析数千个数据文件的进程,目前我正在采取以下策略来限制基于总数量低于可用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)

1 个答案:

答案 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()稍微开始实际上可以为您提供额外的提升,但这只是您可以通过测量确定的。