V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
? 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
azev
V2EX  ?  Python

Python 的 logging 不是实时的?

  •  
  •   azev · 2021-06-01 19:28:04 +08:00 · 2933 次点击
    这是一个创建于 1073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    头次用这个 发现日志文件里记录的时间点都那么接近 都是差不多程序运行结束时的时刻
    这是怎么回事?之前用 js,java 啥的不是这样啊

    18 条回复  ?  2021-06-08 16:12:09 +08:00
    nowheremanx
        1
    nowheremanx  
       2021-06-01 19:36:12 +08:00
    flush 一下?
    chenqh
        2
    chenqh  
       2021-06-01 20:14:56 +08:00
    不应该呀
    ClericPy
        3
    ClericPy  
       2021-06-01 22:03:56 +08:00
    无代码猜不到
    jdhao
        4
    jdhao  
       2021-06-01 22:05:05 +08:00 via Android   ?? 1
    上代码啊,没代码你说个蛋蛋
    leavic
        5
    leavic  
       2021-06-01 23:34:15 +08:00   ?? 1
    确实不是实时的,尤其是有 Exception 的时候,logging 还没完成程序就结束了都可能。
    lzjamao
        6
    lzjamao  
       2021-06-01 23:50:23 +08:00   ?? 1
    这要看 logging 的内部实现了。
    IO 分为有缓冲和无缓冲的。
    有缓冲,不是立即写到磁盘的。
    stderr 是不做缓存立即写的,你可以换个 error 输出接口试试
    或者找下是否有接口,设置缓冲区模式 setvbuf
    luckylo
        7
    luckylo  
       2021-06-02 07:16:49 +08:00 via Android
    确实是。我也碰到过。还把别人怼了。结果自己搞错了。尴尬。
    myCupOfTea
        8
    myCupOfTea  
       2021-06-02 09:02:01 +08:00
    正常啊,就算是 print 他都是有缓冲的啊
    azev
        9
    azev  
    OP
       2021-06-02 10:14:11 +08:00
    @nowheremanx 每句都要跟一个 flush 吗?
    azev
        10
    azev  
    OP
       2021-06-02 10:14:28 +08:00
    @myCupOfTea 貌似其他语言没有这个问题
    azev
        11
    azev  
    OP
       2021-06-02 10:15:17 +08:00
    @lzjamao 开始我是输出到控制台的 发现记录的时间点不对 后来输出到文件 还是一样
    azev
        12
    azev  
    OP
       2021-06-02 10:16:38 +08:00
    @luckylo 确实 这个问题太奇葩了
    ruanimal
        13
    ruanimal  
       2021-06-02 10:30:28 +08:00
    @azev 你代码有问题,logging 到控制台应该是无缓冲的
    myCupOfTea
        14
    myCupOfTea  
       2021-06-02 10:43:19 +08:00
    发现日志文件里记录的时间点都那么接近
    你这个应该是自己的问题了
    no1xsyzy
        15
    no1xsyzy  
       2021-06-02 10:43:54 +08:00
    可是 logging.StreamHandler.emit 在 19 年前刚引入 logging 包就有 flush
    https://github.com/python/cpython/blame/bb3e0c240bc60fe08d332ff5955d54197f79751c/Lib/logging/__init__.py#L1102
    不过 python>=3,<3.7 的话始终有单行 buffer 。

    而且记录时间不是在打印后,而是在打印前,怎么可能因为有 buffer 导致记录的时间点改变?
    flyingghost
        16
    flyingghost  
       2021-06-02 11:44:40 +08:00
    啊不,有 buffer 正常,buffer 还会影响时间戳就不正常了。
    你确定你的姿势没问题吗?
    l4ever
        17
    l4ever  
       2021-06-03 12:21:02 +08:00
    loguru 解君愁
    lusi1990
        18
    lusi1990  
       2021-06-08 16:12:09 +08:00
    pycharm 里面有个环境变量 PYTHONUNBUFFERED=1
    不知道你有没有?
    ![Is PYTHONUNBUFFERED=TRUE a good idea]( https://github.com/aws/amazon-sagemaker-examples/issues/319)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3742 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:03 · PVG 13:03 · LAX 22:03 · JFK 01:03
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com