【问题标题】:multiprocess read one file in python [closed]多进程在python中读取一个文件[关闭]
【发布时间】:2015-04-10 14:00:10
【问题描述】:

我有一个非常非常大的txt.file(大约20G),我可以使用多进程读取整个文件而不是从第一行到最后一行吗?

例如,我有 4 个进程,然后我先计算文件的行数(假设它有 2000 行)。进程1读取第1~500行,进程2读取501~1000,我想知道是否可能(如果一个进程正在读取,另一个进程可以同时读取吗?)。也许这个问题是关于如何拆分txt文件的。

如果没问题。怎么做? 文件中一个进程的代码是这样的:

file = open(file_path,"r",encoding = 'utf-8')
alllines = file.readlines()
file.close()

for line in alllines:
    to do...

我不知道如何将所有行更改为数字。有什么建议吗?提前致谢。

【问题讨论】:

  • 您的问题中有很多“可能”。您的问题是什么?你想对文件的内容做什么?
  • 为什么要多进程呢?效率?
  • 可以这样做,但是磁盘I/O是串行操作;您不能让多个线程/进程并行从磁盘的不同部分读取 - 磁盘读取最终会在文件的不同部分之间来回跳转,具体取决于哪个线程处于活动状态,这通常会使性能比如果你只是在一个线程中完成的。
  • 首先:如果您没有 SSD 或 RAID,那么您将不会获得任何速度提升,因为 HDD 无论如何都会串行化并行读取。其次,你不能真正做你想做的事,因为你不知道(在文件中)第 501 行在哪里而不阅读所有前面的行。所以,是的,逐行处理 20GB 需要时间。
  • 如果每一行的处理都是计算密集型的,那么多处理可能是一个很好的解决方案,但由于上述原因,多处理读取不会有帮助。鉴于计算密集型处理,您可以让一个线程将文件读入队列,并让工作线程从队列中读取以处理每一行

标签: python multiprocessing mpi4py


【解决方案1】:

您可以尝试内存映射文件。见 mmap:documentation here

然后您可以通过多处理任务读取文件,访问映射文件而不是 HDD。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多