首页 > 解决方案 > 使用 Pool 进行多处理不会使用所有可用的 CPU

问题描述

我有一些代码需要处理大量矩阵(全部5简化行梯形形式10的二进制矩阵,没有零行),并根据每个矩阵是否满足某些条件来接受或拒绝每个矩阵。由于有很多事情要做,我正在尝试使用多处理来加快速度。这大致是我的代码目前的样子:

import multiprocessing as mp
import numpy as np

def check_valid(matrix):
    # Perform some checks and things
    if all_checks_passed:
        return matrix.copy()
    return None

subgroups = []

with mp.Pool() as pool:
    subgroups_iter = pool.imap(
        check_valid,
        get_rref_matrices(5),
        chunksize=1000
    )

    for item in subgroups_iter:
        if item is not None:
            subgroups.append(item)

get_rref_matrices是一个递归查找所有 rref 矩阵的生成器函数(我不确定这个函数是否会导致任何问题)。这个函数的完整代码在这里,如果感兴趣的话。

当我运行程序时,它似乎很慢(几乎不比单个进程快),CPU 使用率只有 10% 左右。我之前运行的代码已经用尽了我的 CPU,所以我很难理解为什么这段代码运行得不快。

标签: pythonmatrixmultiprocessinggeneratorpython-multiprocessing

解决方案


推荐阅读