【问题标题】:Performance effect of using print statements in Python script在 Python 脚本中使用 print 语句的性能效果
【发布时间】:2012-10-28 14:22:31
【问题描述】:

我有一个 Python 脚本,它处理一个巨大的文本文件(大约 4 百万行)并将数据写入两个单独的文件。

我添加了一个打印语句,它为每一行输出一个字符串以进行调试。我想知道从性能角度来看它有多糟糕?

如果结果很糟糕,我可以删除调试行。

编辑

事实证明,对于一个有 400 万行的文件中的每一行都有一个打印语句会增加太多时间。

【问题讨论】:

  • 它会变慢,因为您必须执行大量打印,任何额外的处理都会导致一些性能损失。
  • item 发送到套接字队列:程序将首先完成写入,来自套接字的控制台将延迟打印输出。

标签: python console text-files


【解决方案1】:

为了好玩,试着用一个非常简单的脚本来做,差别是相当惊人的:

在 large.py 中:

target =  open('target.txt', 'w')

for item in xrange(4000000):
    target.write(str(item)+'\n')
    print item

时间安排:

[gp@imdev1 /tmp]$ time python large.py
real    1m51.690s
user    0m10.531s
sys     0m6.129s

gp@imdev1 /tmp]$ ls -lah target.txt 
-rw-rw-r--. 1 gp gp 30M Nov  8 16:06 target.txt

现在运行相同的“打印”注释掉:

gp@imdev1 /tmp]$ time python large.py 
real    0m2.584s
user    0m2.536s
sys     0m0.040s

【讨论】:

  • 当你注释掉写入时,留在打印中,然后用> target.txt 运行?
  • @Tim:奇怪的是它运行得更快,但可能是我的机器比我之前运行它时更忙,现在没有时间运行它多次以使用更多健全的统计方法。 [gp@imdev1 /tmp]$ time python large.py > target.txt real 0m1.954s user 0m1.897s sys 0m0.049s
  • 将标准输出重定向到文件会快得多,事实上,您可以定向到文件并在编辑器中打开文件,所需时间比将大量 io 喷射到屏幕所需的时间更短。
  • @GSP 谢谢。看起来,我应该删除打印语句。
  • 我也想知道是否有一个详细的选项来检查是否打印的布尔值会很浪费时间。使用 if False: print item 我让它在 1.417s 中运行,并且没有任何打印,它在 1.357s 中运行。
【解决方案2】:

是的,它会影响性能。 我写了一个小程序来演示-

import time
start_time=time.time()
for i in range(100):
    for j in range(100):
        for k in range(100):
            print(i,j,k)
print(time.time()-start_time)
input()

测得的时间是-160.2812204496765 然后我通过传递替换了打印语句。结果令人震惊。没有打印的测量时间为- 0.26517701148986816。

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多