共享内存 sysv_ipc Python
Shared Memory sysv_ipc Python
我在两个不同的进程之间使用共享内存 (sysv_ipc),我想在另一个代码中查看共享内存的最后更新时间。共有三个程序,一个写入共享内存,另一个从共享内存读取,第三个我需要外部错误处理,所以我想知道最近几分钟共享内存是否没有更新。带着这个想法,我尝试访问共享内存的属性“last_attach_time”。当我在终端中 运行 它工作正常。那就是我在终端中为共享内存创建了一次对象,然后我尝试连续访问该属性并且它工作得很好。在共享内存写入数据之前,“last_attach_time”更新时间,当写入停止时,输出变为常量,这完全没问题。但是当我在外部错误处理代码中包含一个用于连续监控的 while 循环时,该属性没有给出正确的数据。即,即使在停止写入共享内存后,时间仍在增加。有没有人遇到过类似的问题?
谢谢
我是 Python sysv_ipc
模块的作者。
没有看到您的代码,我无法确定发生了什么。但我有预感。
在您的监视器代码中,将内存段的 last_pid
值与 os.getpid()
的值进行比较。如果相同,那么这就是你的答案——last_attach_time
正确地报告了你的监控程序连接到内存的时间,以查看是否有人连接到它。 :-)
更详细的解释:使用 SysV IPC 内存段是一个两步过程。首先创建它,然后附加它。你不能对你没有附加的内存段做很多事情,所以我写了 sysv_ipc
模块来 在 Python 构造函数中自动为你附加段 .换句话说,Python 构造函数会为您完成这两个步骤(创建和附加)。这就是构造函数的文档说 "The memory is automatically attached" 的意思(但这很容易被忽视)。
因此,如果您的监视器代码在每次运行时都创建一个新的 sysv_ipc.Semaphore()
对象,那么它会在这样做时设置 last_attach_time
。
听起来您对上次写入时间更感兴趣,这不是 SysV IPC 提供的值。一种方法是将时间戳记作为写入共享内存的数据的一部分。
我在两个不同的进程之间使用共享内存 (sysv_ipc),我想在另一个代码中查看共享内存的最后更新时间。共有三个程序,一个写入共享内存,另一个从共享内存读取,第三个我需要外部错误处理,所以我想知道最近几分钟共享内存是否没有更新。带着这个想法,我尝试访问共享内存的属性“last_attach_time”。当我在终端中 运行 它工作正常。那就是我在终端中为共享内存创建了一次对象,然后我尝试连续访问该属性并且它工作得很好。在共享内存写入数据之前,“last_attach_time”更新时间,当写入停止时,输出变为常量,这完全没问题。但是当我在外部错误处理代码中包含一个用于连续监控的 while 循环时,该属性没有给出正确的数据。即,即使在停止写入共享内存后,时间仍在增加。有没有人遇到过类似的问题? 谢谢
我是 Python sysv_ipc
模块的作者。
没有看到您的代码,我无法确定发生了什么。但我有预感。
在您的监视器代码中,将内存段的 last_pid
值与 os.getpid()
的值进行比较。如果相同,那么这就是你的答案——last_attach_time
正确地报告了你的监控程序连接到内存的时间,以查看是否有人连接到它。 :-)
更详细的解释:使用 SysV IPC 内存段是一个两步过程。首先创建它,然后附加它。你不能对你没有附加的内存段做很多事情,所以我写了 sysv_ipc
模块来 在 Python 构造函数中自动为你附加段 .换句话说,Python 构造函数会为您完成这两个步骤(创建和附加)。这就是构造函数的文档说 "The memory is automatically attached" 的意思(但这很容易被忽视)。
因此,如果您的监视器代码在每次运行时都创建一个新的 sysv_ipc.Semaphore()
对象,那么它会在这样做时设置 last_attach_time
。
听起来您对上次写入时间更感兴趣,这不是 SysV IPC 提供的值。一种方法是将时间戳记作为写入共享内存的数据的一部分。