python - 使用 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,所以我很难理解为什么这段代码运行得不快。
解决方案
推荐阅读
- python - 在 Python 中从 yaml 文件动态生成数组元素
- javascript - javascript formatDate时区显示不正确
- php - 在 PHP 中自定义排序数组
- regex - 0.000001 的正则表达式值匹配
- angular - 如何在 Angular 组件中实现外部脚本文件?
- assembly - 在 x86-64 中编码 JMP FAR 和 CALL FAR
- python - 使用起始网址在分页链接中使用scrapy刮擦不起作用
- vba - 代码不起作用:使用 vba 将文件从一个目录复制到另一个目录
- visual-studio-code - Visual Studio Code 的用户和系统安装程序之间的区别
- python - 堆叠部分数据框,然后将其合并到熊猫中的原始数据框