Python 使用多线程将文件存储为整数矩阵
我正在尝试使用多线程来读取如下格式的文件:Python 使用多线程将文件存储为整数矩阵,python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我正在尝试使用多线程来读取如下格式的文件: 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, 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
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, 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
[[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()要慢:
谁能告诉我我在多线程中做错了什么
谢谢 在不知道文件有多大的情况下,在您的第一个代码片段中很明显,
chunk=len(file.readlines()[0])
在一个进程中将整个文件拖到内存中。然后启动4个进程(大量开销!)并将字符串分割成块
在第二个代码段中,逐行读取文件,就完成了。这就消除了所有的多处理开销,并直接切入了问题的核心。对于file.readlines()
所需的所有CPU能力,您已经完成了所有工作,并通过逐行读取构建了矩阵,而第一个代码片段刚刚开始启动进程
多处理在这里没有帮助,增加了开销和复杂性,但没有任何好处。在不知道文件有多大的情况下,在您的第一个代码片段中非常清楚地看到,
chunk=len(file.readlines()[0])
在单个进程中将整个文件拖到内存中。然后启动4个进程(大量开销!)并将字符串分割成块
在第二个代码段中,逐行读取文件,就完成了。这就消除了所有的多处理开销,并直接切入了问题的核心。对于file.readlines()
所需的所有CPU能力,您已经完成了所有工作,并通过逐行读取构建了矩阵,而第一个代码片段刚刚开始启动进程
多处理在这里没有帮助,增加了开销和复杂性,但没有任何好处