python - 使用线程/多进程读取多个文件

标签 python multithreading multiprocessing

我目前正在从 FileNameList 的路径列表中提取 .txt 文件,这是有效的。但我的主要问题是,文件太多时速度太慢。

我正在使用这段代码来打印 txt 文件列表,

import os
import sys

#FileNameList is my set of files from my path
for filefolder in FileNameList: 
  for file in os.listdir(filefolder): 
    if "txt" in file:
        filename = filefolder + "\\" + file     
        print filename

任何关于拥有线程/多进程并使其快速阅读的帮助或建议都将被接受。提前致谢。

最佳答案

So you mean there is no way to speed this up?, because my scenario is to read bunch of files then read each lines of it and store it to the database

优化的第一条规则是问问自己是否应该打扰。如果您的程序只运行一次或几次优化那是浪费时间。

第二条规则是,在您做任何其他事情之前,测量问题所在;

编写一个简单的程序,顺序读取文件,将它们拆分成行并将它们填充到数据库中。 在 分析器 下运行该程序,以查看该程序将大部分时间花在哪里。

只有这样你才能知道程序的哪一部分需要加速。


尽管如此,这里还是有一些提示。

  • 可以使用 mmap 加快文件读取速度。
  • 您可以使用multiprocessing.Pool 将多个文件的读取分散到不同的内核上。但是这些文件中的数据最终将进入不同的进程,并且必须使用 IPC 将其发送回父进程。对于大量数据,这会产生巨大的开销。
  • 在 Python 的 CPython 实现中,一次只有一个线程可以执行 Python 字节码。虽然实际的文件读取不受此限制,但处理结果却受到限制。因此,线程是否会提供改进值得怀疑。
  • 将行填充到数据库中可能始终是一个主要瓶颈,因为这是所有东西汇集在一起​​的地方。这有多大问题取决于数据库。它是在内存中还是在磁盘上,它是否允许多个程序同时更新它,等等。

关于python - 使用线程/多进程读取多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31934382/

相关文章:

Android:ListActivity 的正确线程

multithreading - 每个请求 3 个线程

Python的多处理和内存

python - 这种广度优先搜索可以做得更快吗?

python - 恼人的 Python 循环错误?

python - 不知道如何用高斯Python拟合数据

python - 使用多处理附加值时获取空列表

python - 使用 python 和 beautifulsoup 从 td 标签中获取数据

python - 从 tkinter 小部件中启动线程

python - 使用多处理时出现 PicklingError