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