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

2020-08-12 12:18:17 +08:00
 black11black

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

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

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

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

3821 次点击
所在节点    Python
21 条回复
zmxnv123
2020-08-12 12:22:36 +08:00
用 shell 吧 我记得有个工具可以监控文件事件
BingoXuan
2020-08-12 12:24:28 +08:00
leimao
2020-08-12 12:24:59 +08:00
用 asyncio?
lvqier
2020-08-12 12:38:47 +08:00
inotify 应该可以实现你的需求
black11black
2020-08-12 12:39:51 +08:00
@BingoXuan 以前用的是这个,这个是同步的。以前有时间的时候封装过异步,代码找不到了,最近忙懒得封装
MoYi123
2020-08-12 12:41:48 +08:00
同步的库是 select,用 asyncio 应该能改成异步的。
NoAnyLove
2020-08-12 12:49:34 +08:00
abersheeran
2020-08-12 13:54:05 +08:00
@NoAnyLove watchgod 这玩意就是轮询遍历。还是 https://pypi.org/project/watchdog/ 更适合。

@black11black 纠正一下,watchdog 是基于多线程的回调设计。你完全可以把它用在异步代码里,并不会阻塞主线程。
zhuangzhuang1988
2020-08-12 13:54:18 +08:00
yufpga
2020-08-12 14:00:37 +08:00
37Y37
2020-08-12 14:36:46 +08:00
一毛一样的需求,这里有个现成的,django channels websocket
https://blog.ops-coffee.cn/s/r5spytjrl0jjeauye4q_-q
Tink
2020-08-12 15:03:45 +08:00
inotify
zyuu2
2020-08-12 17:04:09 +08:00
watchdog +1
AlohaV2
2020-08-12 17:26:51 +08:00
lolizeppelin
2020-08-12 17:51:23 +08:00
https://github.com/coreutils/coreutils/blob/master/src/tail.c

linux 标准工具就是最好的学习对象
hushao
2020-08-12 20:08:05 +08:00
15 楼说的对,linux 的话 tail 就可以了
yucongo
2020-08-13 23:30:35 +08:00
watchgod https://pypi.org/project/watchgod/ (注意后面是 g o d )支持异步
black11black
2020-08-14 17:16:47 +08:00
@hushao windows

@yucongo 感谢,项目不错
neoblackcap
2020-08-30 05:48:33 +08:00
@MoYi123 asyncio 底层用 epoll,不会支持文件的,其他楼说得挺好的,用基于 inotify 的库就好了。当然了,FreeBSD 可以用 kqueue,不过得自己写
black11black
2020-09-02 12:22:57 +08:00
@neoblackcap epoll 为啥不支持文件读写,epoll 不是基于文件描述符么

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

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

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

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

© 2021 V2EX