繁体   English   中英

共享内存 sysv_ipc Python

[英]Shared Memory sysv_ipc Python

我在两个不同的进程之间使用共享内存 (sysv_ipc),我想在另一个代码中查看共享内存的最后更新时间。 一共有三个程序,一个写共享内存,另一个读共享内存,第三个我需要外部错误处理,所以我想知道共享内存最近几分钟没有更新。 带着这个想法,我尝试访问共享内存的属性“last_attach_time”。 当我在终端中运行它时,它工作正常。 也就是说,我在终端中为共享内存创建了一次对象,然后我尝试连续访问该属性,并且它完全正常工作。 在共享内存写入数据之前,“last_attach_time”更新了时间,当写入停止时,输出变得恒定,这很好。 但是,当我将外部错误处理代码包含在具有持续监视的 while 循环中时,该属性没有提供正确的数据。 即,即使在停止写入共享内存后,时间仍在增加。 有没有人遇到过类似的问题? 谢谢。

我是 Python sysv_ipc模块的作者。

没有看到您的代码,我无法确定发生了什么。 但我有一个预感。

在您的监视器代码中,将内存段的last_pid值与os.getpid()的值进行os.getpid() 如果相同,那么就是您的答案last_attach_time正确报告了您的监视器程序连接到内存的时间,以查看是否有人连接到它。 :-)

更全面的解释:使用 SysV IPC 内存段是一个两步过程。 首先创建它,然后附加它。 您不能对尚未附加的内存段做太多事情,因此我编写了sysv_ipc模块来自动在 Python 构造函数中为您附加该段 换句话说,Python 构造函数为您完成两个步骤(创建和附加)。 当构造函数的文档说“内存是自动附加的”时,这就是它的意思(但这很容易被忽视)。

因此,如果您的监视器代码每次运行时都创建一个新的sysv_ipc.Semaphore()对象,那么它会在这样做时设置last_attach_time

听起来您对上次写入时间更感兴趣,这不是 SysV IPC 提供的值。 一种方法是将时间戳作为写入共享内存的数据的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM