2017-10-20 34 views
0

目前我有一个解析数千个数据文件的过程,目前我正在执行以下策略来限制如果总数低于可用的CPU数量。如何处理基于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

你可以只通过在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()稍微多出一点,但这只是您可以从测量结果中确定的内容。

+0

谢谢,好吧,我想这是剖析时间... –