【发布时间】:2010-03-23 11:37:36
【问题描述】:
让我们想象一个情况:我有两个 Python 程序。第一个将一些数据(str)写入计算机内存,然后退出。然后我将启动第二个程序,它将读取第一个程序保存的内存数据。
这可能吗?
【问题讨论】:
-
将数据写入内存并退出?这些数据如何可靠地用于第二个程序?
让我们想象一个情况:我有两个 Python 程序。第一个将一些数据(str)写入计算机内存,然后退出。然后我将启动第二个程序,它将读取第一个程序保存的内存数据。
这可能吗?
【问题讨论】:
有点。
python p1.py | python p2.py
如果 p1 写入标准输出,则数据进入内存。如果 p2 从标准输入读取,它从内存中读取。
问题是没有“我将开始第二个程序”。您必须启动这两个程序,以便它们共享适当的内存(在这种情况下,是 stdout 和 stdin 之间的缓冲区。)
【讨论】:
所有这些无意义的答案是什么?当然,您可以按照您要求的方式共享内存,除了缺少用户模式 API 之外,没有任何技术原因您不应该能够持久化内存。
在 Linux 中,您可以使用共享内存段,即使在创建它们的程序消失后仍然存在。您可以使用ipcs(1) 查看/编辑它们。要创建它们,请参阅 shmget(2) 和相关的系统调用。
您也可以使用 POSIX 共享内存,这可能更便携。见shm_overview(7)
我想你可以像 this 这样在 Windows 上做到这一点。
【讨论】:
使用数据库之类的东西将您的数据存储到“内存”中,例如 dbm、sqlite、shelve、pickle 等,您的第二个程序可以稍后再使用。
【讨论】:
没有。
一旦第一个程序退出,它的内存就完全消失了。
您需要写入磁盘。
【讨论】:
第一个会写一些数据 (str) 到计算机内存,然后 退出。
然后,操作系统将确保所有内存在任何其他程序可以看到之前清零。 (这是一项重要的安全措施,因为第一个程序可能正在处理您的银行对帐单或可能已经知道了您的密码)。
您需要写入持久存储 - 可能是磁盘。 (或者您可以使用 ramdisk,但这不太可能对实际性能产生任何影响)。
另外,为什么你有 2 个程序?为什么不是一个程序可以同时完成这两项任务?
【讨论】:
free()上的内存归零,但这仍然无法将您从被分页的内存或被交换的页表等中解救出来...... .
【讨论】:
您还可以设置永久共享内存区域,让一个程序写入它,另一个程序读取它。但是,设置这些东西在某种程度上取决于底层的 O/S。
【讨论】:
也许张贴者在谈论共享内存之类的东西?看看这个:http://poshmodule.sourceforge.net/
【讨论】: