Python 中大量使用 print 会影响性能吗?

2017-02-04 09:23:58 +08:00
 whx20202

有的 Java 编程规范禁止使用 print 强制让用 logger 代替

不知道 python 是不是也一样的

15354 次点击
所在节点    Python
34 条回复
virusdefender
2017-02-04 09:27:06 +08:00
io 会影响性能的,但是使用 log 是为了更方便管理吧。。
whx20202
2017-02-04 09:36:28 +08:00
我就怕 println 是同步阻塞 而且没有缓存,来一个请求发一次
ryd994
2017-02-04 09:40:37 +08:00
缓存是不可能的
有缓冲
techmoe
2017-02-04 09:43:38 +08:00
print 好像是会同步阻塞的吧
感觉最能体现这一点的应该在网络延时高的情况下 ssh 进服务器跑 py 的时候,由于输出耗时长所以带大量 print 的方法的执行速度肯定会拖累下来
whx20202
2017-02-04 09:44:02 +08:00
@ryd994 我想的应该就是缓冲 尴尬。。
chy373180
2017-02-04 09:45:07 +08:00
会的
misaka19000
2017-02-04 09:46:13 +08:00
io 本来速度就很慢,但是请问下使用 log 会比直接 print 快吗难道?
robinlovemaggie
2017-02-04 09:49:08 +08:00
@misaka19000 看你用哪种了,如果把 log 放到 redis 里用 pub,sub 来实现会好很多。
Neveroldmilk
2017-02-04 09:56:13 +08:00
当然会,所以不到关键时刻,不要随便 print ,虽然 print 性能下降到原来几分之一很正常。
knktc
2017-02-04 10:03:27 +08:00
会严重影响性能~
chenqh
2017-02-04 10:28:36 +08:00
如果并发高,logger 就少点咯,然而我没有并发
D3EP
2017-02-04 10:37:24 +08:00
@misaka19000 log 框架有异步的,减少 IO 次数,提高效率
est
2017-02-04 10:38:57 +08:00
>/dev/null 就不会太影响性能。
slixurd
2017-02-04 10:42:25 +08:00
不懂 Python,不过原理差不多吧
虽然 print 和 logger 都一样是 io consume 的,不过很多 logger 是基于 ringbuffer 做的异步输出
另外还有线程安全的问题,Python 的 print 也是线程不安全的,你有加锁么......
另外如果用 print,你要把日志打印到文件,如果没有用第三方 log rotate 工具,日志会堆积...
堆积到磁盘满了,你想删除日志文件,还要等所有持有 inode 的进程都停掉文件才能被删除,不停止进程还没法清空磁盘
lbp0200
2017-02-04 10:45:30 +08:00
首先,你要有这样一个高并发的程序。
misaka19000
2017-02-04 10:49:16 +08:00
@D3EP 本质上应该还是把数组先保存在内存,之后在写入到磁盘吧?
lbp0200
2017-02-04 10:59:28 +08:00
@misaka19000 不能这样,会有内存溢出的风险
ke1e
2017-02-04 11:02:05 +08:00
两个耗时应该一样吧,如果是高并发,肯定 logger 好
misaka19000
2017-02-04 11:08:04 +08:00
@lbp0200 为什么你的回复没有提醒?
guyskk
2017-02-04 11:14:59 +08:00
log 有不同级别,可以关闭,可以替换内部实现, print 就很难拓展了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/337970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX