Python 如何检查文件是否发生变化

我本来想用 IO 多路复用来实现,但是查看 Python 关于 select 接口的文档(select --- 等待 I/O 完成¶)的时候发现👇

该模块提供了对 select() 和 poll() 函数的访问,这些函数在大多数操作系统中是可用的。在 Solaris 及其衍生版本上可用 devpoll(),在 Linux 2.5+ 上可用 epoll(),在大多数 BSD 上可用 kqueue()。注意,在 Windows 上,本模块仅适用于套接字;在其他操作系统上,本模块也适用于其他文件类型(特别地,在 Unix 上也适用于管道)。本模块不能用于常规文件,不能检测出(自上次读取文件后)文件是否有新数据写入。

这让我的想法落空了,Python 的 select 接口居然不支持对普通文件的 IO 多路复用检查?

但是我又不想通过轮询访问最后修改时间来监控文件是否发生变化,因为这在性能和及时性上无法达到很好的平衡。

我想知道 Python 的 select 接口为什么不支持对普通文件的 IO 多路复用

阅读 4.2k
1 个回答

Linux有个专用于文件系统的监听接口inotify,对于epollinotify的区别和联系,可以参考stackoverflow的这个问答: https://stackoverflow.com/que...

因此你的场景可能更适合去用inotify接口 https://pypi.org/project/inot...

回到你的问题上,因为epoll或者select模型针对的是文件描述符,并不能准确描述通常文件的具体行为,所以epoll本身也并不提供这种功能,参见问答: https://stackoverflow.com/que...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题