后断程序, tornado 为例,启动多进程, logging 在写同一个文件时候,会有 IO 阻塞的问题?那是否需要为每一个进程指定自己的 log 文件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
< href="http://learnpythonthehardway.org/book/" target="_blank">Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
1989922yan
V2EX    Python

后断程序, tornado 为例,启动多进程, logging 在写同一个文件时候,会有 IO 阻塞的问题?那是否需要为每一个进程指定自己的 log 文件?

  •  
  •   1989922yan 2015-01-18 22:44:38 +08:00 8260 次点击
    这是一个创建于 3943 天前的主题,其中的信息可能已经有所发展或是发生改变。
    13 条回复    2017-06-29 21:53:54 +08:00
    9hills
        1
    9hills  
       2015-01-18 23:05:27 +08:00
    1. logging是线程安全的,但不是多进程安全的。也就是说多进程间不会有IO阻塞
    2. 多进程使用logging建议是每个进程单独一个log文件,不会阻塞,会写乱。。

    如果你非要多进程还要写到一个文件,那么有两种解决方案
    1. 所有进程log到SocketHandler,然后有个专门的进程监听Socket写入文件,相当于日志聚合
    2. 使用multiprocessing的Lock类,把写日志变成阻塞的
    scys
        2
    scys  
       2015-01-18 23:13:06 +08:00
    多进程,直接考虑syslog的后端了。
    kier
        3
    kier  
       2015-01-18 23:30:21 +08:00 via iPad
    多进程log同一个文件,不用锁也是可以的,每次log小于一个page大小(4096),应该是原子操作的
    1989922yan
        4
    1989922yan  
    OP
       2015-01-18 23:35:24 +08:00
    @9hills
    ok,对我来说完美答案。
    目测是并不在意乱写的。
    grep总是会抓出问题。

    写入不同日志,也可,不知道用处大不大。
    1989922yan
        5
    1989922yan  
    OP
       2015-01-18 23:36:58 +08:00
    @kier
    完美。
    因为我感觉项目中,只使用一个log爽一些。
    再切分log就是了
    9hills
        6
    9hills  
       2015-01-18 23:57:59 +08:00
    @1989922yan 那个追加写的原子限制是 PIPE_BUF,Linux是4096,Windows是1024

    不过依赖这种限制踩坑的可能还是有的,比如打了一个大JSON出来之类。。不过不敏感的话就这么搞也可以
    est
        7
    est  
       2015-01-19 00:00:56 +08:00 via Android
    rsyslog
    不要重复发明轮子
    9hills
        8
    9hills  
       2015-01-19 00:08:18 +08:00
    @est 刚才我放狗搜了下,发现这个地方轮子也挺多

    有开Socket的,有加Queue的,有加Lock的,当然也有SyslogHandler的

    Queue用的最多,不过就我个人来言,不是很喜欢自己的程序依赖系统工具,哪怕是syslog。估计是被我厂那BT的线上环境折腾习惯了,我厂的线上环境就是让你不要依赖于系统的任何东西,全部自己带。。
    1989922yan
        9
    1989922yan  
    OP
       2015-01-19 09:49:32 +08:00
    @9hills
    这是运维洁癖嘛。。?
    ok,就是发个帖子能学点什么,还是get了
    mqingyn616
        10
    mqingyn616  
       2015-01-19 12:12:04 +08:00
    分端口写日志最方便。性能也最保证。
    VYSE
        11
    VYSE  
       2015-01-19 12:22:08 +08:00
    如果是log输出量一般的话,不会有IO阻塞,内容直接进buf了,而且LINUX默认保证在buf范围内多进程写入同一文件的原子性。
    1989922yan
        12
    1989922yan  
    OP
       2015-01-20 16:22:31 +08:00
    @VYSE 哦哦,这个特性第一次知道,学习了
    linzhi
        13
    linzhi  
       2017-06-29 21:53:54 +08:00
    @kier 好方法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4480 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:00 PVG 18:00 LAX 02:00 JFK 05:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86