如题,需求是想要用 websocket 实时监控日志文件。
一个很简单的实现方法是间隔一定时间轮询是否有修改,比如每秒查看一次日志是否有改动,但是毕竟这么写还是不太舒服
最理想的方式是当文件修改以后触发一个回调。
以前用过同步的库实现这个功能,忘了叫什么了,想问一下异步现在有实现方案吗,毕竟基本上所有东西都是异步的了
如题,需求是想要用 websocket 实时监控日志文件。
一个很简单的实现方法是间隔一定时间轮询是否有修改,比如每秒查看一次日志是否有改动,但是毕竟这么写还是不太舒服
最理想的方式是当文件修改以后触发一个回调。
以前用过同步的库实现这个功能,忘了叫什么了,想问一下异步现在有实现方案吗,毕竟基本上所有东西都是异步的了
|
xe2vherdAug 12, 2020 via iPhone
1
用 shell 吧 我记得有个工具可以监控文件事件
|
|
BingoXuanAug 12, 2020
2
|
|
leimaoAug 12, 2020
3
用 asyncio?
|
|
lvqierAug 12, 2020
4
inotify 应该可以实现你的需求
|
|
5
@BingoXuan 以前用的是这个,这个是同步的。以前有时间的时候封装过异步,代码找不到了,最近忙懒得封装
|
|
MoYi123Aug 12, 2020
6
同步的库是 select,用 asyncio 应该能改成异步的。
|
|
NoAnyLoveAug 12, 2020
7
|
|
abersheeranAug 12, 2020
8
@NoAnyLove watchgod 这玩意就是轮询遍历。还是 https://pypi.org/project/watchdog/ 更适合。
@black11black 纠正一下,watchdog 是基于多线程的回调设计。你完全可以把它用在异步代码里,并不会阻塞主线程。 |
|
zhuangzhuang1988Aug 12, 2020
9
|
|
yufpgaAug 12, 2020
10
|
|
11
一毛一样的需求,这里有个现成的,django channels websocket
https://blog.ops-coffee.cn/s/r5spytjrl0jjeauye4q_-q |
|
TinkAug 12, 2020
12
inotify
|
|
zyuu2Aug 12, 2020
13
watchdog +1
|
|
AlohaV2Aug 12, 2020
14
|
|
lolizeppelinAug 12, 2020
15
|
|
hushaoAug 12, 2020
16
15 楼说的对,linux 的话 tail 就可以了
|
|
17
watchgod https://pypi.org/project/watchgod/ (注意后面是 g o d )支持异步
|
|
18
|
|
neoblackcapAug 30, 2020
19
@MoYi123 asyncio 底层用 epoll,不会支持文件的,其他楼说得挺好的,用基于 inotify 的库就好了。当然了,FreeBSD 可以用 kqueue,不过得自己写
|
|
20
@neoblackcap epoll 为啥不支持文件读写,epoll 不是基于文件描述符么
|
|
neoblackcapSep 2, 2020
21
@black11black 不要问我为什么不支持,因为人家设计就是不支持。你可以去查阅对应的文档说明。epoll 只支持网络 IO 。文件 IO 跟网络 IO 虽然看起来都是 fd,但是的确是两种东西。
|