【问题标题】:Improve speed when reading very large files in Python在 Python 中读取非常大的文件时提高速度
【发布时间】:2016-04-05 14:06:08
【问题描述】:

所以我正在运行多个函数,每个函数从百万行 .txt 文件中提取一个部分。每个函数都有一个 for 循环,该循环贯穿百万行文件中的每一行。

它从这些行中获取信息以查看它是否与其他 2 个文件中的信息匹配,一个大约 50,000-100,000 行长,另一个大约 500-1000 行长。我通过在其他 2 个文件中运行 for 循环来检查这些行是否匹配。一旦信息匹配,我将输出写入一个新文件,所有函数都写入同一个文件。该程序每分钟将产生大约 2,500 行,但运行时间越长,速度就越慢。另外,当我运行其中一个函数时,它每分钟运行大约 500 个,但是当我使用 23 个其他进程执行它时,它每分钟只运行 2500 个,这是为什么呢?

有人知道为什么会这样吗?无论如何,我可以导入一些东西以使程序更快地运行/读取文件,我已经在使用with "as file1:" 方法。

可以重做多进程以更快地运行吗?

【问题讨论】:

  • 更多线程!= 更快。这取决于你有多少核心
  • 如果您的所有数据都可以放入内存,您可以尝试使用 pandas 模块处理您的数据 - 它非常快速且非常高效。不要忘记最慢的部分——磁盘 IO 系统,它很可能是你的瓶颈,而不是你的线程数
  • 1.你有几个核心? 2. 这个进程使用的 CPU 占总 CPU 的比例是多少(如果接近 100%,那么更多的内核将无济于事)。 3. 线程如何到达“他们”部分的开头?如果他们必须先阅读 n 行,我很惊讶这并没有减慢速度。
  • 我还建议您打开一个新问题,其中包含更详细的描述,您将在其中提供输入数据的匿名样本和预期输出

标签: python for-loop large-files python-multiprocessing cpu-speed


【解决方案1】:

线程只能使用您的资源。 4 核 = 4 线程,具有完整资源。在少数情况下,拥有更多线程可以提高性能,但对您而言并非如此。因此,将线程数保持在您拥有的内核数上。

另外,因为您可以同时访问一个文件,所以您需要对该文件进行锁定,这会稍微减慢处理速度。

然而,可以改进的是您的代码来比较字符串,但这是另一个问题。

【讨论】:

  • 您需要四个线程处理。如果他们可能会陷入 IO 等待,那么您需要更多(以保持核心忙碌)。
  • @MartinBonner 是的,但我相信他的处理时间比他在文件中写入的时间长得多
猜你喜欢
  • 2013-08-10
  • 2016-11-23
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
相关资源
最近更新 更多