使用多线程将文件存储为整数矩阵

Store a file as a matrix of integers using multi-threading

我正在尝试使用多线程来读取格式如下的文件:

0 0 1 1 0 1 0 1
0 1 0 0 0 1 1 1
1 1 1 0 1 1 0 0

其中每一行都是一个字符串,例如第一个是:

"0 0 1 1 0 1 0 1"

并将其存储为这样的矩阵:

[[0, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 1, 1, 0, 0]]

到目前为止我想出了:

from multiprocessing.dummy import Pool

def splitline(line):
    values = [int(char) for char in line.split()]
    return values

with open("file.txt", "r") as file:
    chunk = len(file.readlines()[0])
    file.seek(0)
    with Pool(4) as pool:
        matrix = pool.map(splitline, file, chunk)

但它比简单地使用 map() 慢:

with open("file.txt", "r") as file:
    matrix = []
    for line in file:
        matrix.append([value for value in map(int, line.split())])

谁能告诉我我在多线程中做错了什么?

谢谢!

在不知道您的文件有多大的情况下,在您的第一个代码段中很清楚 chunk = len(file.readlines()[0]) 将整个文件以 single-process 的形式插入内存。然后启动 4 个进程(大量开销!)并将字符串拆分为块。

在您的第二个代码段中,您逐行读取文件并完成。这消除了所有多处理开销并直接切入正题。对于 file.readlines() 所需的所有 CPU 功能,您已经完成了所有工作并通过逐行阅读构建了矩阵,而第一个片段刚刚启动流程。

多处理在这里没有帮助,增加开销和复杂性没有任何好处。