推荐学习书目
› 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
black11black
V2EX  ›  Python

Python 有什么办法异步监控文件修改吗?

  •  
  •   black11black · Aug 12, 2020 · 5072 views
    This topic created in 2275 days ago, the information mentioned may be changed or developed.

    如题,需求是想要用 websocket 实时监控日志文件。

    一个很简单的实现方法是间隔一定时间轮询是否有修改,比如每秒查看一次日志是否有改动,但是毕竟这么写还是不太舒服

    最理想的方式是当文件修改以后触发一个回调。

    以前用过同步的库实现这个功能,忘了叫什么了,想问一下异步现在有实现方案吗,毕竟基本上所有东西都是异步的了

    21 replies  •  2020-09-02 14:10:48 +08:00
    xe2vherd
    xe2vherd
    Aug 12, 2020 via iPhone
    1
    用 shell 吧 我记得有个工具可以监控文件事件
    leimao
    leimao
    Aug 12, 2020
    3
    用 asyncio?
    lvqier
    lvqier
    Aug 12, 2020
    4
    inotify 应该可以实现你的需求
    black11black
    black11black
    OP
    Aug 12, 2020
    5
    @BingoXuan 以前用的是这个,这个是同步的。以前有时间的时候封装过异步,代码找不到了,最近忙懒得封装
    MoYi123
    MoYi123
    Aug 12, 2020
    6
    同步的库是 select,用 asyncio 应该能改成异步的。
    abersheeran
    abersheeran
    Aug 12, 2020
    8
    @NoAnyLove watchgod 这玩意就是轮询遍历。还是 https://pypi.org/project/watchdog/ 更适合。

    @black11black 纠正一下,watchdog 是基于多线程的回调设计。你完全可以把它用在异步代码里,并不会阻塞主线程。
    37Y37
    37Y37
    Aug 12, 2020❤️1
    11
    一毛一样的需求,这里有个现成的,django channels websocket
    https://blog.ops-coffee.cn/s/r5spytjrl0jjeauye4q_-q
    Tink
    Tink
    Aug 12, 2020
    12
    inotify
    zyuu2
    zyuu2
    Aug 12, 2020
    13
    watchdog +1
    lolizeppelin
    lolizeppelin
    Aug 12, 2020
    15
    https://github.com/coreutils/coreutils/blob/master/src/tail.c

    linux 标准工具就是最好的学习对象
    hushao
    hushao
    Aug 12, 2020
    16
    15 楼说的对,linux 的话 tail 就可以了
    yucongo
    yucongo
    Aug 13, 2020 via Android❤️1
    17
    watchgod https://pypi.org/project/watchgod/ (注意后面是 g o d )支持异步
    black11black
    black11black
    OP
    Aug 14, 2020
    18
    @hushao windows

    @yucongo 感谢,项目不错
    neoblackcap
    neoblackcap
    Aug 30, 2020
    19
    @MoYi123 asyncio 底层用 epoll,不会支持文件的,其他楼说得挺好的,用基于 inotify 的库就好了。当然了,FreeBSD 可以用 kqueue,不过得自己写
    black11black
    black11black
    OP
    Sep 2, 2020
    20
    @neoblackcap epoll 为啥不支持文件读写,epoll 不是基于文件描述符么
    neoblackcap
    neoblackcap
    Sep 2, 2020
    21
    @black11black 不要问我为什么不支持,因为人家设计就是不支持。你可以去查阅对应的文档说明。epoll 只支持网络 IO 。文件 IO 跟网络 IO 虽然看起来都是 fd,但是的确是两种东西。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1589 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 23:33 · PVG 07:33 · LAX 15:33 · JFK 18:33
    ♥ Do have faith in what you're doing.