我们正在使用python/Django
进行Web开发。虽然开发阶段wilson编码我倾向于把print
声明很多地方检查代码的控制流。 并与打印语句相同的代码被上传服务器, 我知道日志记录是更适合的地方,但我发现自己更舒服print
。打印声明是否会使网站的性能问题
我想知道几行代码会使网站变慢,如果变慢。 可以说,我有100行代码,并在此之后添加了5条print
声明。另一种研究它的方式是我写了一行105行代码。那么从这个意义上说,我不应该改变(我想)。
这会使网站变慢吗?
我们正在使用python/Django
进行Web开发。虽然开发阶段wilson编码我倾向于把print
声明很多地方检查代码的控制流。 并与打印语句相同的代码被上传服务器, 我知道日志记录是更适合的地方,但我发现自己更舒服print
。打印声明是否会使网站的性能问题
我想知道几行代码会使网站变慢,如果变慢。 可以说,我有100行代码,并在此之后添加了5条print
声明。另一种研究它的方式是我写了一行105行代码。那么从这个意义上说,我不应该改变(我想)。
这会使网站变慢吗?
是的,因为参数需要在输出之前转换为字符串,可以是一个昂贵的操作。
但是,使用print
会导致另一个问题。一些WSGI容器,特别是其中的mod_wsgi,不喜欢默认发送到标准输出的任何东西,因此会在发生这种情况时引发异常。您可以通过打印到stderr来解决此问题,但性能问题将保持不变。
打印到控制台是总是慢...
def computationally_expensive_function(x):
xl = reversed(range(x)[1:])
y = x
for z in xl:
y = y * z
return y
In [16]: %timeit computationally_expensive_function(5)
1000000 loops, best of 3: 1.46 us per loop
In [17]: %timeit print computationally_expensive_function(5)
<lots of prints>
100 loops, best of 3: 1.87 ms per loop
如果我带的400阶乘,然后每次迭代计算上升到147uS,并打印上去3.5ms。这意味着,仅仅打印结果会使其在小型案例中长达100倍,在长案例中长达20倍。
但是......与任何基于性能的表现一样,这并不意味着您有问题。如果它处于紧密的环路中 - 非常糟糕。如果它的代码每隔几分钟左右调用一次,额外的1ms开销就不会注意到。
我所做的是有一个称为调试的变量,每次我打印说如果调试:打印x。然后当你完成后,你可以设置调试错误,而不用担心它。 –
建议:让自己适应日志记录和'assert'语句。 – rlms