使用 pyinotify 过早发出 IN_CLOSE_WRITE 通知

2023-12-27

我遇到以下情况:

  • pyinotify 监视文件中的 IN_CLOSE_WRITE 事件
  • 我更改文件中的某些内容并保存
  • 事件被触发
  • 我阅读了该文件,发现它没有任何更改

经过一番修改后,我注意到在调试时它工作得很好。我在读取文件的行上设置了一个断点,从而增加了一点延迟。之后 - 文件被读取并且更改就在那里。

所以,似乎添加一个time.sleep(1),或者以其他方式延迟执行就可以了。否则我会收到过早的 IN_CLOSE_WRITE 事件。

我想知道事件是否被触发after提交更改并关闭文件,或者before那。 IN_CLOSE_WRITE之后似乎没有其他相关事件。同时,文档有点棘手:

使用 IN_CLOSE_WRITE 因为如果发出the all对相应文件的更改会安全地写入文件内

我提交了一份关于常见问题解答中措辞的错误报告,但与此同时,我想获得有关此事的一些额外意见。这应该发生吗?解决这个问题的“道德上正确”的方法是什么?

所有这一切都发生在 Linux Mint 15 x64 上。


事实证明,这种行为是并非异常 https://github.com/seb-m/pyinotify/issues/55:

正如我之前所说,我认为 inotify 的任务(因此正如 Pyinotify 所报告的那样)是在文件关闭时向您发出信号(更准确地说,当文件被其文件描述符关闭时),但显然内核使用缓冲区,因此文件数据可能不会立即写入磁盘。更多详细信息请参见 close() 函数的 man(2):

成功关闭并不能保证数据已成功保存到磁盘,因为内核会延迟写入。文件系统在流关闭时刷新缓冲区的情况并不常见。如果需要确保数据是物理存储的,请使用 fsync(2)。 (此时这将取决于磁盘硬件。)

你不能依赖的底线IN_CLOSE_WRITE确保您的数据已完成写入磁盘。

换句话说,这不是一次过早的通知,而是恰逢其时;但操作系统的底层机制可以继续对该文件执行某些操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyinotify 过早发出 IN_CLOSE_WRITE 通知 的相关文章

随机推荐

  • bitbake:构建系统如何选择多个层提供的配方

    元层提供配方 meta recipes graphics x11 common xserver nodm init bb 元 oe 层提供配方 meta oe recipes graphics xserver nodm init xserv
  • 在生产应用程序中使用谷歌凭据的最佳方法是什么?

    我正在为 STT 构建 C net 应用程序 并且正在手动创建凭据 我发现文档对我来说非常混乱 我不知道如何正确添加凭据 我添加了一个项目 创建了一个 json 凭证并下载并保存在一个文件夹中 并手动指向它GoogleCredential获
  • 为什么以及何时使用 LINQ? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我从未在我的任何项目中使用过 LINQ 我一直在我的商业应用程序项目中使用 ado net OR 工具 所以我想知道 LINQ 有什么好处 为什
  • Python OpenCV 多处理 cv2.VideoCapture mp4

    我想运行一些mp4进程内的视频 但只有摄像头有效 软件卡住 没有错误消息 我已经尝试过这两种方法 但发现它无法运行 打印是代码被卡住的地方 import cv2 import multiprocessing dispW 640 dispH
  • SQL Server 2008 域更改

    在不久的将来 我的组织将不得不更改其中一台 SQL 服务器的计算机名称和 Windows 域 服务器运行SQL Server 2008企业版 操作系统为Windows Server 2008标准版 我找到了处理机器名称更改的良好参考资料 但
  • 致命错误:在第 146 行 ...\..\Abstract.php 中找不到类“Mage_Enterprise_Giftwrapping_Block_Adminhtml_Product_Helper_Form_Config”

    我正在将 magento 企业版迁移到社区版 我就快完成了 但后端几乎没有问题 如果我转到 管理产品 并单击任何产品 我会收到此错误 致命错误 在第 146 行 lib Varien Data Form Abstract php 中找不到类
  • Windows 中的 Visual Studio Code 命令无法正常工作

    我的问题是 在 Windows 上手动将 VS Code 命令行添加到 PATH 时 如何才能使其正常工作 在 Visual Studio Code 内部 我首先尝试使用复选框 安装到 PATH 来安装它 但是当我输入code在命令提示符中
  • 从文本中解析子字符串

    我正在编写一个宏 用于将 LDAP 格式的名称列表转换为 名字 姓氏 区域 对于那些不知道 LDAP 是什么样子的人 如下所示 CNN 约翰 史密斯 区域 OU 法律 DC 示例 DC 命令 在 Excel VBA 中 我似乎无法使用 st
  • 如何触发附加到 ZF2 中共享事件管理器的事件?

    附加到 本地 事件管理器的事件 public class myClass implements EventManagerAwareInterface public function construct this gt getEventMan
  • 在 WIN32 中的“BUTTON”类窗口上显示位图

    Edit 我认为在创建子窗口 即我的按钮 期间不会发送 WM CREATE 消息 因此 通过在 WM CREATE 期间调用 SendMessage 我将向尚未创建的窗口发送一条消息 目前的解决方案是在 WM SHOWWINDOW 消息期间
  • 为自定义类型创建自定义模型绑定器

    在 ASP NET CORE 1 1 项目中 我有以下模型 public class GetProductsModel public OrderExpression OrderBy get set OrderExpression 是一个具有
  • 免费注册 COM:引用 VB6 DLL 的 VB6 可执行文件

    因此 我有一个引用多个 VB6 COM DLL 的 VB6 可执行文件 我是否可以即时生成可执行文件的清单以及每个引用的 DLL 的清单 如果是这样 那又如何呢 我想在构建过程中执行此操作 而无需将 COM DLL 注册为该过程的一部分 注
  • 如何从自适应卡获取消息

    我使用有 2 个操作的自适应卡 actions type Action Submit title Cards related queries data Cards intent type Action Submit title Accoun
  • OS X AppEngine - 导入错误:没有名为 _sqlite3 的模块

    更新 这是我在全新安装的 OS X 10 8 3 上使用 1 8 0 App Engine SDK 时遇到的问题 首先 有很多关于 SO 的具有类似标题的问题 我已经检查过它们 但我不相信它们回答了我的问题 大多数情况下 他们建议获取 li
  • 使用GET方法上传文件

    众所周知 文件上传最常使用POST方法 那么 为什么不能GET方法可以用来代替文件上传吗 是否有针对 HTTP 的具体禁止GET上传 GET 请求可能包含实体主体 RFC 2616 不阻止实体正文作为 GET 请求的一部分 这经常被误解 因
  • q.js:resolve() 和fulfill() 之间的区别

    我仍然不清楚调用解析器的resolve 与fulfill 之间的区别 我看到函数和术语 解决承诺 和 履行承诺 都被反复讨论 我应该什么时候使用它们 你应该使用resolve deferredPromise resolve nextProm
  • 用于控制 Web API 中响应格式的 UiPath 扩展映射

    我在 ASP NET WebAPI 中使用 UriPathExtensionMapping 时遇到问题 我的设置如下 我的路线是 config Routes MapHttpRoute name Api UriPathExtension ro
  • 关系表的复合索引

    我有以下表格 CREATE TABLE students student id int NOT NULL AUTO INCREMENT student name varchar 40 NOT NULL DEFAULT PRIMARY KEY
  • 块中的线程数

    I used x y用于计算设备中矩阵的单元格 当我对 lenA 和 lenB 使用超过 32 个时 断点 在int x threadIdx x 在设备代码中 无法工作并且输出不正确 在主机代码中 int lenA 52 int lenB
  • 使用 pyinotify 过早发出 IN_CLOSE_WRITE 通知

    我遇到以下情况 pyinotify 监视文件中的 IN CLOSE WRITE 事件 我更改文件中的某些内容并保存 事件被触发 我阅读了该文件 发现它没有任何更改 经过一番修改后 我注意到在调试时它工作得很好 我在读取文件的行上设置了一个断