多进程分割一个文件总是IO绑定的吗?

2024-05-19 10:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读一个类似的线程,其中OP希望使用多处理(foundhere)来处理函数中的每一行。这个问题的答案是:

from multiprocessing import Pool

def process_line(line):
    return "FOO: %s" % line

if __name__ == "__main__":
    pool = Pool(4)
    with open('file.txt') as source_file:
        # chunk the work into batches of 4 lines at a time
        results = pool.map(process_line, source_file, 4)

我想知道您是否可以这样做,但是不要返回处理过的每一行,而是将其写入另一个文件。在

基本上,我想看看是否有一种方法来MP读写一个文件,以便按行拆分。假设每个文件需要100000行。在

^{pr2}$

我可以使用MP Queue将文件拆分为单独的队列对象,然后用写出所有行的任务填充每个处理器,但我仍然必须首先读取文件。那么,它会永远是完全IO绑定的,永远无法以高效的方式成为MP吗?在


Tags: 文件答案fromsourcelinemp线程multiprocessing
1条回答
网友
1楼 · 发布于 2024-05-19 10:28:41

正如您所怀疑的那样,这是工作负载实际上不会从multiprocessing中获益(如果有的话)。你所要做的就是读取一个文件,然后将该文件的内容写入其他文件。这完全是I/O的限制;瓶颈是读写磁盘的速度。使用multiprocessing尝试同时将多个文件写入同一个磁盘不会使写入速度更快,因为磁盘一次只能写入一个内容。在

multiprocessing的帮助是,如果你有一些CPU限制的工作可以并行化,但这并不是你所要做的。如果您想从一个文件中读取行,对每一行进行一些相当繁重的处理,然后将它们写入另一个文件,multiprocessing可能会有所帮助,但在写入每一行之前似乎不需要进行任何处理。在

相关问题 更多 >

    热门问题