Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多线程将文件存储为整数矩阵_Python_Python 3.x_Python Multithreading - Fatal编程技术网

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能力,您已经完成了所有工作,并通过逐行读取构建了矩阵,而第一个代码片段刚刚开始启动进程

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