我在读一个类似的线程,其中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吗?在
正如您所怀疑的那样,这是工作负载实际上不会从
multiprocessing
中获益(如果有的话)。你所要做的就是读取一个文件,然后将该文件的内容写入其他文件。这完全是I/O的限制;瓶颈是读写磁盘的速度。使用multiprocessing
尝试同时将多个文件写入同一个磁盘不会使写入速度更快,因为磁盘一次只能写入一个内容。在multiprocessing
的帮助是,如果你有一些CPU限制的工作可以并行化,但这并不是你所要做的。如果您想从一个文件中读取行,对每一行进行一些相当繁重的处理,然后将它们写入另一个文件,multiprocessing
可能会有所帮助,但在写入每一行之前似乎不需要进行任何处理。在相关问题 更多 >
编程相关推荐